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)
sed 选项
sed -i -e 's/[A-Z][A-Z]/PT_&/' file
Run Code Online (Sandbox Code Playgroud)
在哪里
-i 就地编辑-e 要执行的命令