【问题标题】:Bash shell script: appending text to a specific line of an existing file without line break [duplicate]Bash shell脚本:将文本附加到现有文件的特定行而不换行[重复]
【发布时间】:2018-03-28 16:56:28
【问题描述】:

我有一个名为 tmp.mount 的文件,其内容如下

[Mount]
Options=mode=1777,strictatime,noexec,nosuid
  1. 我想通过单词 Options= 搜索文件以获取 行号。
  2. 我将通过给定的行号搜索单词 nodev。
  3. 如果不存在,我会在末尾插入单词,nodev 此行通过给定的行号。

有了结果

[Mount]
Options=mode=1777,strictatime,noexec,nodev,nosuid,nodev

全部没有换行符。大多数解决方案是使用 sed,但我不知道如何将行搜索与 sed 结合起来。

【问题讨论】:

  • 为什么要按行号操作,而不是根据内容是否匹配进行过滤?您尝试使用哪种先前的方法来插入换行符?

标签: linux string bash shell


【解决方案1】:
awk '/Options=/ && ! /nodev/ {print $0 ",nodev"; next};1' file

无需获取行号,只需将“,nodev”附加到相应的行

【讨论】:

  • @CharlesDuffy 谢谢!
  • @CharlesDuffy 文件中的内容是动态的,Options= 可能会出现在不同的行上。有什么方法可以处理这种情况吗?
  • @DicksonChu 你所说的动态是什么意思,你能在问题中举出更多的例子吗?
  • @CharlesDuffy 假设 Options= 在文件的另一行,该命令还能工作吗? awk 是否会将这个新附加的字符串更新回给定文件中?还是我必须存储 awk 的输出并确保 sed 更新文件。
  • @DicksonChu 我需要更多关于你的模式的信息,如果Options= 只发生在行首,你可以让它/^Options=/ 可以吗?并且 awk 不会更改您的原始文件,您也可以 1. 保存到 tmp 文件并更改名称 2. 使用 gawk 4.1.0+ gawk -i inplace btw,你被错误的人保留了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-20
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多