使用tr删除特定字符串

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


Kev*_*erg 10

在上面的示例中,cut命令就足够了.

示例:echo '1.1231' | cut -d '.' -f 2将返回1231.

有关切割的更多信息,请输入man cut.


Asu*_*awa 5

你也可以使用sed来做这种事情:

$ echo "1.1231" | sed -e "s/1\.//"
1231
Run Code Online (Sandbox Code Playgroud)

这只是使用sed运行正则表达式搜索和替换,替换"1".(适当的逃脱)与"".它默认只删除第一个匹配项.


Mic*_*ild 5

如果您使用bash,则可以通过参数替换轻松地做到这一点:

$ a=1.1231
$ echo ${a#1.}
1231
Run Code Online (Sandbox Code Playgroud)

这将删除前导 "1."字符串。如果要删除最多(包括第一次出现的情况),请使用${a#*1.},如果要删除所有(包括最后一次出现的情况),请使用${##*1.}

有关字符串操作的TLDP页面还具有其他选项(例如子字符串提取)。

请注意,使用标准的sh内置字符串操作工具进行这种简单的转换总是比使用外部工具(例如)要快得多sedawk或者cut因为外壳程序不必创建子进程来执行操作。但是,对于更复杂的事情(例如,您需要使用正则表达式或输入较大时),最好使用专用工具。