int*_*ide 22 unix bash command tr
是否可以tr
在UNIX-Shell中使用命令删除特定字符串?例如:如果我键入:
tr -d "1."
Run Code Online (Sandbox Code Playgroud)
输入是1.1231
,它会显示23
为输出,但我希望它显示1231
(注意只有第一个1
已经消失).我该怎么办?
如果你知道一个解决方案或更好的方法,请解释语法,因为我不想复制和粘贴,但也要学习.
我对awk有很大的问题,所以如果你使用它,请解释一下.
小智 11
你最好使用某种正则表达式(也许像sed这样的东西).
例如,使用输入1.1231,您可以使用以下内容来获取1231输出:
sed 's/1\.//g'
Run Code Online (Sandbox Code Playgroud)
也许看看这里:http: //tldp.org/LDP/abs/html/string-manipulation.html
你也可以使用sed来做这种事情:
$ echo "1.1231" | sed -e "s/1\.//"
1231
Run Code Online (Sandbox Code Playgroud)
这只是使用sed运行正则表达式搜索和替换,替换"1".(适当的逃脱)与"".它默认只删除第一个匹配项.
如果您使用bash
,则可以通过参数替换轻松地做到这一点:
$ a=1.1231
$ echo ${a#1.}
1231
Run Code Online (Sandbox Code Playgroud)
这将删除前导 "1."
字符串。如果要删除最多(包括第一次出现的情况),请使用${a#*1.}
,如果要删除所有(包括最后一次出现的情况),请使用${##*1.}
。
有关字符串操作的TLDP页面还具有其他选项(例如子字符串提取)。
请注意,使用标准的sh
内置字符串操作工具进行这种简单的转换总是比使用外部工具(例如)要快得多sed
,awk
或者cut
因为外壳程序不必创建子进程来执行操作。但是,对于更复杂的事情(例如,您需要使用正则表达式或输入较大时),最好使用专用工具。
归档时间: |
|
查看次数: |
57488 次 |
最近记录: |