当前位置: 首页 > 面试题库 >

如何使用bash在文件中间添加一行文本?

杜俊爽
2023-03-14
问题内容

我正在尝试在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其中包含nameserver 127.0.0.1新行(您的版本sed可能不支持\n,在这种情况下,请n用文字换行符替换)和原始行(由表示&):

s/nameserver .*$/nameserver 127.0.0.1\n&/

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

p


 类似资料:
  • 问题内容: 好吧,我是linux新手,我在使用简单的bash脚本时遇到了问题。 我有一个程序可以在运行时添加到日志文件中。随着时间的流逝,日志文件变得越来越大。我想创建一个启动脚本,该脚本将在每次运行之前重命名并移动日志文件,从而为程序的每次运行有效地创建单独的日志文件。到目前为止,这是我得到的: 糊盒 运行时,我看到以下内容: 当我CD到logs目录并运行dir时,我看到以下内容: 这是怎么回事

  • 问题内容: 如何使用bash在文件的每一行之后添加字符串?可以使用sed命令完成此操作吗? 问题答案: 如果您允许通过参数进行就地编辑: 如果没有,则必须制作一个临时文件:

  • 问题内容: 我想在现有的CSV文件中添加一行标题,并在适当位置进行编辑。我怎样才能做到这一点? 我想结束 更改初始CSV输出不方便。 任何标准命令都可以。重要的是,文件已就地编辑,并且该行插入到文件的开头。 问题答案: 这将在文件的开头添加自定义文本:

  • 我在文件。我正在使用要成为电子邮件模板和电子邮件,我需要添加图像,但我不能。我是新加入节点的。js和Stack Overflow,我在下面放了一些关于我的代码的信息。 app.useexpress.static(path.join__dirname)

  • 问题内容: 我已经使用python创建了一个txt文件,其中包含几行文本,这些文本将由一个简单的程序读取。但是,我在重新打开文件以及在程序的后续部分中在文件中写入其他行时遇到了一些麻烦。(这些行将从稍后获得的用户输入中写入。) 这是假设“ file.txt”已被打开并被写入。但是,使用我当前拥有的代码第二次打开该文件时,我必须擦除之前编写的所有内容并重写新行。有没有办法防止这种情况发生(并可能减少

  • 问题内容: 我想读取一个包含多行的名为history.txt的文本文件,并将最后一行的内容存储到一个名为“ tag”的变量中。 谢谢 问题答案: