我正在尝试在 bash 脚本的文本文件中间添加一行文本。具体来说,我正在尝试将名称服务器添加到我的/etc/resolv.conf 文件中。就目前而言,resolv.conf 看起来像这样:
# Generated by NetworkManager
domain 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 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
这如何通过 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 127.0.0.1
的行替换以 nameserver
开头的第一行,新行(您的 sed
版本可能不支持 \n
,在这种情况下,将 n
替换为文字换行符)和原始行(由 &
表示):
s/nameserver .*$/nameserver 127.0.0.1\n&/
现在我们只需要打印结果:
p
https://stackoverflow.com/questions/6739258/
相关文章:
c - 为什么 pthread 互斥锁被认为是 "slower"而不是 futex?
linux - "zero copy networking"与 "kernel bypass"?
python - 在 Ubuntu 中启动时运行 Python 脚本
linux - 使用 linux 命令行 (bash) 从网络摄像头拍照
c - 在 Linux 中何时使用 pthread_exit() 以及何时使用 pthread_jo
linux - 为什么 Linux 不通过 TSS 使用硬件上下文切换?