微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用bash将一行文本添加到文件的中间?

我正在尝试在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可以做的吗? 还是会创造性地重新创build文件是我的最佳举措?

grep命令查找小于一个数字的前一个单词

如何在BASH中打印整行

从特定字段中删除引号 – 引号之间的整数

将文本文件分割成多个文件

linux剪切命令的字段值条件

使用AWK提取

改变AWK读取文件的方式

find一个模式并修改下一行而不修改文件中的其他内容。 最好是基于Linux的命令(sed,awk等)

awk脚本总是打印sum = 0

在不使用grep -w的情况下在QNX中查找完全匹配

这是一个使用sed的解决方案:

$ sed -n 'H;${x;s/^n//;s/nameserver .*$/nameserver 127.0.0.1n&/;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.1n&/

现在我们只需要打印结果:

p

假设你想要在search行之后立即插入,这要简单得多:

sed -ie '/^search/a nameserver 127.0.0.1' filename

-i :编辑文件

-e :允许在sed表达式中执行脚本/命令

a mynewtext :命令告诉sed在匹配的模式之后插入mynewtext文本

awk '/^nameserver/ && !modif { printf("INSERTn"); modif=1 } {print}'

感觉如何?

sed -e ':a;N;$!ba;s/nameserver/nameserver 127.0.0.1nnameserver/' /etc/resolv.conf

(类似于这样: sed:在两行中查找模式,不能在该模式之后替换 )

这可能适合你:

sed -e '/nameserver/{x;/./b;x;h;inameserver 127.0.0.1' -e '}' resolv.conf

或GNU sed:

sed -e '0,/nameserver/{//inameserver 127.0.0.1' -e '}' resolv.conf

这是一个Perl解决方案:

perl -lne 'if (not $f and /^nameserver/){ print "nameserver 127.0.0.1"; $f=1 }; print' resolv.conf

-n循环输入文件的每一行,不要自动打印每一行

-l在处理之前删除换行符,然后将其添加回来

-e执行Perl代码

$f用作一个标志来表示已经找到了名称服务器字符串

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐