如何使用 sed 查找和替换包含星号 * 的文本

如何使用 sed 查找和替换包含星号 * 的文本

我想在许多.procmailrc文件中查找和替换文本,并使用grepsed

我想从文件中删除以下行(包括开头的新换行符).procmailrc

* !^FROM_MAILER

我想要的文件的完整内容更改为:

:0
* !^FROM_MAILER
! [email protected]

到:

:0
! [email protected]

我正在运行的命令是:

grep -lir '\n* !^FROM_MAILER' .procmailrc | xargs sed -i 's/\n* !^FROM_MAILER//g'

但它并没有取代*.留下的线只有*上面的。如果我*按如下方式转义,那也不起作用:

grep -lir '\n\* !^FROM_MAILER' .procmailrc | xargs sed -i 's/\n\* !^FROM_MAILER//g'

所以我试图找出如何进行查找和替换以删除其中包含的整行*

答案1

单独使用sed

sed -i '/^* !^FROM_MAILER$/d' file

删除包含确切字符串的整行* !^FROM_MAILER,该字符串之前和之后没有任何内容。该d命令删除该行。


编辑:如果您想重复地在所有文件中进行替换,请使用以下命令:

find /path -type f -exec sed -i '/^* !^FROM_MAILER$/d' {} +

相关内容