awk - 使用 sed 命令将缩写字符串 (U.S.A.) 替换为 USA

标签 awk sed

如何使用 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/

相关文章:

linux - 删除以非数字数据开头的行并在 linux 中的特定文本格式之前插入文本

linux - Sed 在匹配前插入一个换行符

bash - 如何使用 bash/awk 在列表中找到 X 个最低值?

linux - 如何将文件中的列粘贴到另一个临时文件?

shell - 旋转文本文件

r - 在 bash 或 R 中翻译每个第 N 个字符串的有效方法

regex - 如何使用 sed 命令删除一行中除前三个字符以外的所有字符?

linux sed 仅在编辑第一行时读取整个文件

awk - 仅当列条目与上一行的列不匹配时有条件地打印行

linux - 使用 awk 将登录统计信息打印到文件