Regex 如何为所有不带';不要从多个单词中的一个开始

Regex 如何为所有不带';不要从多个单词中的一个开始,regex,sed,Regex,Sed,我正在尝试使用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 PRE

我正在尝试使用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-E'/^(为做而睡)/!s/^/前缀\文件
前缀为someText
睡眠1
在另一个字符串前面加前缀
睡眠1
对于{1..50}中的i
做
前缀_命令
睡眠1
前缀_secondCommand
睡眠1
完成
/^(为做而睡)/sleep
for
do
单词开头的行之外,code>将匹配所有行。

我喜欢awk

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