我正在尝试为文件中不以sed的多个单词中的一个开头的所有行添加前缀。
示例:
someText
sleep 1
anotherString
sleep 1
for i in {1..50}
do
command
sleep 1
secondCommand
sleep 1
done
应成为
PREFIX_someText
sleep 1
PREFIX_anotherString
sleep 1
for i in {1..50}
do
PREFIX_command
sleep 1
PREFIX_secondCommand
sleep 1
done
我可以排除任何以单个模式单词开头的行(即:sleep,for,do,done(,但我不知道如何排除所有以多个模式之一开头的行。目前我使用以下命令:
sed -i '/^sleep/! s/^/PREFIX_/'
这对从睡眠开始的所有线路都很有效。我想有一些方法可以组合模式词,但我似乎找不到解决方案。类似这样的东西(显然不起作用(:
sed -i '/[^sleep;^for;^do]/! s/^/PREFIX_/'
如有任何帮助,我们将不胜感激。
使用多个单词交替否定:
sed -i -E '/^(sleep|for|do)/! s/^/PREFIX_/' file
PREFIX_someText
sleep 1
PREFIX_anotherString
sleep 1
for i in {1..50}
do
PREFIX_command
sleep 1
PREFIX_secondCommand
sleep 1
done
/^(sleep|for|do)/!
将匹配除以sleep
或for
或do
字开头的行之外的所有行。
我喜欢awk。
awk '/sleep|for|do/ { print; next; } { print "PREFIX_" $0 }' filename