我正在编写一个 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
在这两个示例中,我们首先从头到尾匹配要添加文本的文字行,然后使用命令sed
(a
“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