【问题标题】:Append line only when 2 search criteria are met仅在满足 2 个搜索条件时追加行
【发布时间】:2013-08-05 13:55:45
【问题描述】:

我想用 sed 完成以下任务 1.查找第一次出现的[sometext] 完全匹配

2.然后从那里开始搜索 stuID = 10 完全匹配

3.然后为 [sometext] 下第一次出现的 stuID 添加行 checkID = 4

注意:checkID 的值会根据 [sometext] 发生变化,这就是为什么我只需要在第一次出现时附加行

我的尝试

sed '/[sometext]/{ s/stuID = 10/a\checkID = 4/1 }' file.txt

sed 's/[sometext]/{ s/stuID = 10/a\checkID = 4/1 }' file.txt

sed '/[sometext]/{ s/stuID = 10/a\checkID = 4/g }' 文件.txt

{只是看看如果我没有指定添加新行的次数,命令是否有效。

我加了\]来转义[]

结果

1.Command 被执行但 checkID=4 没有添加到 file.txt 中

2.Error : sed: -e expression #1, char 18: multiple g' options to s' 命令 暗示语法本身是错误的

3.Command 被执行但 checkID=4 没有添加到 file.txt 中

当我说执行时,我的意思是没有错误消息

文件.txt

[sometext]
blah blah blah
blah blah blah
stuID = 10 
blah blah blah
blah blah blah
[Anothertext]
blah blah blah
blah blah blah
stuID = 5
blah blah blah
blah blah blah

我希望它成为 文件.txt

[sometext]
blah blah blah
blah blah blah
stuID = 10 
checkID=4 
blah blah blah
blah blah blah
[Anothertext]
blah blah blah
blah blah blah
stuID = 5
checkID=6
blah blah blah
blah blah blah

在这一点上我完全累了,一无所知。希望有人能帮助我

问候

【问题讨论】:

  • 提示:awk 是更好的工具来处理这个要求。

标签: bash sed


【解决方案1】:

这可能对你有用(GNU sed):

sed -e '/\[sometext\]/,/stuID = 10/{/stuID = 10/{a\checkID = 4' -e ':a;n;ba}}' file

这会找到两个搜索字符串之间的范围并附加所需的文本。最后传递文件的其余部分。

【讨论】:

  • 谢谢你的回复,但是你能解释一下这部分吗:a;n;ba
  • 老兄,当我运行脚本时,它按预期显示换行符,但是当我在 bash 运行后打开文件时,新行不出现
  • 换行我的意思是 checkID=4
  • 忽略我上面的 cmets,只是文件位置的愚蠢错误
猜你喜欢
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 2012-12-05
相关资源
最近更新 更多