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

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

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

我需要在 '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

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

答案1

awk

awk '$2~/^[A-Z][A-Z]/{ $2="PT_"$2 }1' xid.txt

输出:

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

  • $2~/^[A-Z][A-Z]/- 如果第二个字段以 2 个大写字母开头

或者sed方法:

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

答案2

sed选项

sed -i -e 's/[A-Z][A-Z]/PT_&/' file

在哪里

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

相关内容