regex - 在 sed 或 awk 中的两个匹配项之间的最后一行之前插入文本

标签 regex linux awk sed

我有这样的文件:

subset {
    set {
        type "car"
        product "ww"
        dealer "something"
        features "0"
        wheels 4
    }

这可以用不同的“类型”重复

我想在“集合”中的最后一个 } 之前插入一些内容

所以它看起来像(不确定 awk 或 sed 是否能以某种方式检测到前面有多少空格 :D ):

subset {
    set {
        type "car"
        product "ww"
        dealer "something"
        features "0"
        wheels 4
        something
    }

我可以用它来匹配

sed "/type.*.car.*/,/\} .... something here..."

文件我只是想不出来.. 我不能寻找“轮子”,因为那可能是不同的东西。任何帮助将不胜感激。

最佳答案

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

sed '/\<type\>.*\<car\>/{h;:a;n;/^\s*}/!ba;x;s/\S.*/something/;G}' file

查找包含所需type 的行,复制该行,然后读取/打印后续行,直到以右花括号开头的行。交换回复制的行并将第一个非空格开始的所有内容替换为所需的字符串,附加包含右花括号的行并打印结果。

关于regex - 在 sed 或 awk 中的两个匹配项之间的最后一行之前插入文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58559955/

相关文章:

linux - cat pipe awk 操作与文件上 awk 命令的比较

linux - 在 shell 脚本中对日期进行验证

linux - 比较两个文件并打印不匹配的行

bash - 替换不在括号中的数字?

javascript - 设置动态正则表达式的格式

PHP 脚本在浏览器中以交互方式取消链接文件,但不是作为 cPanel cron 作业

linux - Git merge 另一个远程的分支

c# - 有没有一种优雅的方法来解析单词并在大写字母前添加空格

regex - 使用正则表达式查找所有匹配项 - 贪婪和非贪婪!

php - 使用正则表达式对文件列表进行排序