正则表达式来替换文件中块中的单词?

正则表达式来替换文件中块中的单词?

如果我有:

<Directory />
 words
 allow
 bus
</Directory>

是否有一个正则表达式可以用其他东西替换allow并保持其他单词和块完整?

所以它应该看起来像:

<Directory />
 words
 not
 bus
</Directory>

或者

<Directory />
 words
 bus
</Directory>

因为我会把这个词替换成别的东西或者把它去掉。我尝试过这样的正则表达式:

(<Directory />(\s|\w|\n)+)allow((\s|\n|\w)+</Directory>)

并将其替换为\1\n not \2,但它替换了allow并删除了我不想要的块的后半部分。

那么是否有一个正则表达式可以替换块中的单词并保持块完整?

答案1

我不完全理解你的具体问题,一个简单的sed方法就可以实现你所展示的内容:

$ sed 's/\ballow\b/not/g' afile
<Directory />
 words
 not
 bus

守卫\b,以便我们只allow用字符串替换单词,例如not。如果您想删除包含该字符串的行,也allow可以使用以下命令:sed

$ sed '/\ballow\b/d' afile
<Directory />
 words
 bus
</Directory>

相关内容