我试图获取所有出现的 # ,如果它们是连续的,则仅用一个 # 替换它们。
例如
ab ### cde fghi## jklm
会成为:
ab # cde, fghi# jklm
我最初的目标是将所有连续数字替换为 # so; 120 -> # 和 3->#。然而我发现120->###。所以现在我面临这个新问题。
答案1
使用tr -s
:
$ echo 'ab ### cde fghi## jklm' | tr -s '#'
ab # cde fghi# jklm
-s
将输入中最后一个操作数(string1 或 string2)中列出的多个字符压缩到该字符的单个实例中。这发生在所有删除和翻译完成之后。
您原来的问题可以通过以下方式解决:
sed -E 's/[0-9]+/#/g'
或者 POSIXly:
sed 's/[[:digit:]]\{1,\}/#/g'
或者:
tr -s '[:digit:]' '[#*]'