如何使用bash在文件中间添加一行文本?
我正在尝试在bash脚本的文本文件中间添加一行文本。具体来说,我正在尝试将名称服务器添加到我的/etc/resolv.conf文件中。就目前而言,resolv.conf看起来像这样:
# Generated by NetworkManagerdomain dhcp.example.com
search dhcp.example.com
nameserver 10.0.0.1
nameserver 10.0.0.2
nameserver 10.0.0.3
我的目标是nameserver
127.0.0.1在所有其他名称服务器行的上方,但在其上方的任何文本下方。最后,我希望我的resolve.conf文件看起来像这样:
# Generated by NetworkManagerdomain dhcp.example.com
search dhcp.example.com
nameserver 127.0.0.1
nameserver 10.0.0.1
nameserver 10.0.0.2
nameserver 10.0.0.3
通过bash脚本怎么可能?sed或awk可以执行此操作吗?还是创造性地尝试重新创建文件是我最好的选择?
回答:
这是使用sed的解决方案:
$ sed -n 'H;${x;s/^\n//;s/nameserver .*$/nameserver 127.0.0.1\n&/;p;}' resolv.conf# Generated by NetworkManager
domain dhcp.example.com
search dhcp.example.com
nameserver 127.0.0.1
nameserver 10.0.0.1
nameserver 10.0.0.2
nameserver 10.0.0.3
工作原理:首先,用-n
标志禁止sed的输出。然后,对于每一行,我们将其追加到保留空间,并用换行符将其分隔:
H
当我们到达文件末尾(由寻址$
)时,我们将保留空间的内容移至模式空间:
x
如果模式空间中的第一行为空白,则我们将其替换为空。
s/^\n//
然后,我们用包含的行替换第一行,nameserver
其中包含nameserver
127.0.0.1新行(您的版本sed
可能不支持\n
,在这种情况下,请n
用文字换行符替换)和原始行(由表示&
):
s/nameserver .*$/nameserver 127.0.0.1\n&/
现在我们只需要打印结果:
p
以上是 如何使用bash在文件中间添加一行文本? 的全部内容, 来源链接: utcz.com/qa/420012.html