两个模式匹配相同的sed命令

时间:2016-04-25 18:54:53

标签: linux sed

我有以下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)),
...

我只想要在输入后出现的格式行。并删除那些尾随))或),

1 个答案:

答案 0 :(得分:1)

您可以使用此sed命令:

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

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

说明:

  • 我使用[(]代替\(。括号外(通常表示分组,如果您需要文字(,则需要将其转义为\(,或者您可以将其放在括号内。大多数RE特殊字符放在括号内时都不需要转义。
  • ([^)]+)表示一个组("("此处为RE元字符而不是字面括号),由一个或多个(+)字符组成({{{ 1}})^(字面右括号),)反转字符类^