如何使用 sed 或 awk 将字符串添加到除少数字符之外的所有行中的 .txt 文件

Sub*_*hoo 8 sed awk text-processing

我有一个名为的文本文件xid.txt

xid: SC48028 id: artf398444
xid: indv1000 id: indv24519
xid: SC32173 id: artf398402
xid: SC21033 id: artf398372
xid: 1001 id: tracker4868
xid: wiki1000 id: wiki10709
xid: proj1234 id: proj12556
Run Code Online (Sandbox Code Playgroud)

我需要在 'SC48028' 、 'SC32173' ... 之前添加一个字符串 'PT_' 。字符串 'SC...' 可以以任意组合开头,可以是 'AC...' 或 'DL..'

所需输出:

xid: PT_SC48028 id: artf398444
xid: indv1000 id: indv24519
xid: PT_SC32173 id: artf398402
xid: PT_SC21033 id: artf398372
xid: 1001 id: tracker4868
xid: wiki1000 id: wiki10709
xid: proj1234 id: proj12556
Run Code Online (Sandbox Code Playgroud)

如果你看到上面的输出,我们不应该在以 'i' 、 'p' 、 'w' 和 'numerical' 开头的字符串之前插入 'PT_' 。我在 sed 中使用 insert/append 尝试了一些基本命令来满足我的要求。

Rom*_*est 13

使用awk

awk '$2~/^[A-Z][A-Z]/{ $2="PT_"$2 }1' xid.txt
Run Code Online (Sandbox Code Playgroud)

输出:

xid: PT_SC48028 id: artf398444
xid: indv1000 id: indv24519
xid: PT_SC32173 id: artf398402
xid: PT_SC21033 id: artf398372
xid: 1001 id: tracker4868
xid: wiki1000 id: wiki10709
xid: proj1234 id: proj12556
Run Code Online (Sandbox Code Playgroud)
  • $2~/^[A-Z][A-Z]/ - 如果第二个字段以 2 个大写字母开头

sed方法:

sed -i 's/^\(xid:[[:space:]]*\)\([A-Z]\{2\}[^[:space:]]*\)/\1PT_\2/' xid.txt
Run Code Online (Sandbox Code Playgroud)


Arc*_*mar 6

sed 选项

sed -i -e 's/[A-Z][A-Z]/PT_&/' file
Run Code Online (Sandbox Code Playgroud)

在哪里

  • -i 就地编辑
  • -e 要执行的命令