如何使用 sed 命令替换“U.S.A.”等字符串至“USA”或“D.A.R.P.A.”到美国国防部高级研究计划局。 "不是字符串的一部分。
所以我的目标是仅替换大量文本中的缩写。
我尝试了 sed "s/.//g"file.txt >file2.txt
但这会替换所有出现的点。
然后我尝试了一堆不同的组合,例如:
sed "s/([A-Z]\.)+/[A-Z]/g"file.txt >file2.txt
这显然不起作用。
显然终端不接受 () 括号或嵌套括号
如果我想用非常具体的内容替换字母后跟点,我可以使用 sed "s/[A-Z]/a/g"file.txt >file2.txt
最佳答案
假设OP只想删除大写字母后面出现的点
$ s='U.S.A. foo.bar D.A.R.P.A. a.b.'
$ echo "$s" | sed 's/\([A-Z]\)\./\1/g'
USA foo.bar DARPA a.b.
$ # if ERE is available as -E or -r option
$ echo "$s" | sed -E 's/([A-Z])\./\1/g'
USA foo.bar DARPA a.b.
\([A-Z]\)
是 capture group\1
是对匹配字符串的反向引用\.
因为.
是元字符,需要转义才能匹配- 另请参阅 wooledge quotes了解何时使用单引号/双引号
关于awk - 使用 sed 命令将缩写字符串 (U.S.A.) 替换为 USA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49097789/