如何向不以多个单词之一开头的所有行添加前缀



我正在尝试为文件中不以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)/!将匹配除以sleepfordo字开头的行之外的所有行。

我喜欢awk。

awk '/sleep|for|do/ { print; next; } { print "PREFIX_" $0 }' filename

最新更新