如何使用 sed 在文件中的特定行之后添加给定行

如何使用 sed 在文件中的特定行之后添加给定行

我正在编写一个 bash 文件,用 sed 编辑另一个文件。我希望在以下行之后添加一个新行:

echo "rpcallowip=127.0.0.1\n";

添加的行将显示为

echo "rpcallowip=$webip\n";

新的输出example.conf将读取

echo "rpcallowip=127.0.0.1\n";
echo "rpcallowip=10.0.0.1\n";

重要的是该行保持如图所示的“ ”。

答案1

file假设我有包含内容的文件

text
text text
echo "rpcallowip=127.0.0.1\n";
text
text text

echo要使用以下命令在行后追加一行sed

sed '/^echo "rpcallowip=127.0.0.1\\n";$/a\
echo "rpcallowip=$webip\\n";
' file

使用 GNU sed

sed '/^echo "rpcallowip=127.0.0.1\\n";$/a echo "rpcallowip=$webip\\n";' file

在这两个示例中,我们首先从头到尾匹配要添加文本的文字行,然后使用命令seda“append”)附加所需的文本。在模式和插入的文本中, in\\n需要额外转义一次(并且要特别迂腐,模式中 IP 地址中的每个点都应该是\.)。

上述运算的结果就是输出

text
text text
echo "rpcallowip=127.0.0.1\n";
echo "rpcallowip=$webip\n";
text
text text

答案2

在某个名为的文件中的现有行之后sed添加行的强力简单方法是:echo "rpcallowip=$webip\n";echo "rpcallowip=127.0.0.1\n";example.conf

sed 's/echo "rpcallowip=127.0.0.1\\n";/echo "rpcallowip=127.0.0.1\\n";\necho "rpcallowip=$webip\\n";/' example.conf

请注意,四个换行符中的三个\n需要使用前导反斜杠进行转义\,以免实际上被视为换行符。

这就是你想要实现的目标吗?

更惯用的解决方案是使用sed 分组:

sed 's/\(echo "rpcallowip=127.0.0.1\\n";\)/\1\necho "rpcallowip=$webip\\n";/' example.conf

在第二个示例中sed\(划分\)sed 团体,并\1指先前划分的第一组(在本例中是唯一的组)。

答案3

你也可以尝试这个 sed

webip='10.0.0.1'
sed -E '
h
s/(echo "rpcallowip=)([0-9.]*)(.*)/\1'"$webip"'\3/
tA
b
:A
x
p
x
' infile

相关内容