在UNIX-Shell中是否可能使用tr
命令删除特定字符串?例如,如果我输入:
tr -d "1."
如果输入是1.1231,它将显示23作为输出,但我希望它显示1231(注意只有第一个1消失了)。我该如何做?如果您知道解决方案或更好的方法,请解释一下语法,因为我不想只是复制粘贴,也想学习。
我对awk有很大的问题,所以如果您使用它,请更详细地解释。
在上面的例子中,cut 命令就足够了。
例如:echo '1.1231' | cut -d '.' -f 2
会返回 1231
。
要了解更多关于cut的信息,只需键入 man cut
。
最好使用某种正则表达式(例如sed)。
例如,对于输入1.1231,您可以使用以下内容来获得输出1231:
sed 's/1\.//g'
或许可以在这里看一下: http://tldp.org/LDP/abs/html/string-manipulation.html
$ echo "1.1231" | sed -e "s/1\.//"
1231
这只是使用sed来运行正则表达式的搜索和替换,将“1。”(适当进行转义)替换为“”。默认情况下,它仅删除第一个匹配项。
既然您特别询问了awk
,这里再介绍一个。
awk '{ gsub(/1\./,"") }1' input.txt
awk
教程都会告诉你,awk
程序的一般形式是一系列 'condition { actions }'。如果你没有 actions,则默认操作是打印。如果你没有条件,则无条件执行 actions。这个程序使用了这两种特殊情况。/1\./
的所有出现。因此,它将从一行中删除任何 '1.'(不考虑上下文)。1
(当用作条件时,表示“true”)。awk '{ gsub(/1\./,""); print }' input.txt
/[0-9]+\./
。
gsub
是GNU扩展,因此如果您需要向后兼容旧版awk
语法,则可能需要将其替换为sub
或某种循环。请注意保留HTML标签。
tr
是替换单个字符而不是字符串,因此 (a) 你的命令会删除输入中任何位置出现的所有 "1" 和 ".";(b)tr
不是你所要求的任务的正确命令。 - tripleee