我有一个文本文件,其中有一行

sometext sometext sometext TEXT_TO_BE_REPLACED sometext sometext sometext

我需要将上面的整行替换为

This line is removed by the admin.

搜索关键字是text_to_be_replace

我需要为此写一个shell脚本。如何使用sed实现这一点?


当前回答

下面的命令对我有用。哪个是处理变量的

sed -i "/\<$E\>/c $D" "$B"

其他回答

你需要在前后使用通配符(.*)来替换整行:

sed 's/.*TEXT_TO_BE_REPLACED.*/This line is removed by the admin./'

您可以使用change命令替换整行,并使用-i标志进行适当的更改。例如,使用GNU sed:

sed -i '/TEXT_TO_BE_REPLACED/c\This line is removed by the admin.' /tmp/foo

下面的命令对我有用。哪个是处理变量的

sed -i "/\<$E\>/c $D" "$B"

这和上面那个很相似。

sed 's/[A-Za-z0-9]*TEXT_TO_BE_REPLACED.[A-Za-z0-9]*/This line is removed by the admin./'

以上答案:

sed -i '/TEXT_TO_BE_REPLACED/c\This line is removed by the admin.' /tmp/foo

如果替换字符串/行不是变量,工作正常。

问题是在Redhat 5上,c后面的\转义了$。双\\也不起作用(至少在红帽5上)。

通过hit和trial,我发现如果替换字符串/行只有一行,那么c后面的\是多余的。所以我没有在c后面使用\,使用一个变量作为单一的替换行,它是joy。

代码看起来像这样:

sed -i "/TEXT_TO_BE_REPLACED/c $REPLACEMENT_TEXT_STRING" /tmp/foo

注意使用双引号而不是单引号。