gpt4 book ai didi

linux - 同一 sed 命令上的两个模式匹配

转载 作者:太空宇宙 更新时间:2023-11-04 10:37:13 25 4
gpt4 key购买 nike

我有以下 sed 命令:

sed -n '/^out(/{n;p}' ${filename} | sed -n '/format/ s/.*format=//g; s/),$//gp; s/))$//gp'

我试着把它写成一行,如下所示:

sed -n '/^out(/{n;}; /format/ s/.*format=//g; s/),$//gp; s/))$//gp' ${filename}

但这也会显示我不想要的行(那些不匹配的行)。

我有一个包含一些字符串的文件,如下所示:

entry(variable=value)),
format(variable=value)),
entry(variable=value)))
out(variable=value)),
format(variable=value)),
...

我只想要 out 条目之后的格式行。并删除尾随的 )) 或 ),

最佳答案

你可以使用这个 sed 命令:

sed -nr '/^out[(]/ {n ; s/.*[(]([^)]+)[)].*/\1/p}' your_file

一旦找到 out,它就会前进到下一行 (n) 并使用带有 p< 的 s 命令 标志以仅提取括号内的内容。

解释:

  • 我使用了 [(] 而不是 \(。如果您想要文字 ,则在括号外的 ( 通常表示分组(,您需要将其转义为 \( 或者您可以将其放在方括号内。大多数 RE 特殊字符放在方括号内时不需要转义。
  • ([^)]+) 表示由一个或多个 (+) 字符组成的组(这里的“(”是 RE 元字符而不是文字括号)不是 (^) )(文字右括号),^ 反转字符类 [ ... ]

关于linux - 同一 sed 命令上的两个模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36848822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com