我想连接几行,对它们执行正则表达式匹配并打印它们。
我试图用 sed 做到这一点。
即,我使用了:
cat add | sed -rn '/FIRST_LINE_REGEX/,/LAST_LINE_REGEX/s/SOME_REGEX/&/p'
它仅打印与 SOME_REGEX 匹配的行,而我希望它连接 FIRST_LINE 和 LAST_LINE 之间范围内的行,并在匹配 SOME_REGEX 时打印连接。
最佳答案
使用时 '/FIRST_LINE_REGEX/,/LAST_LINE_REGEX/'
每行仍单独处理,要连接行,您需要使用保留空间或 N
命令将下一行附加到模式空间。这是一种选择:
cat add | sed -rn '/FIRST_LINE_REGEX/{:a;N;/LAST_LINE_REGEX/{/SOME_REGEX/p;d};ba}'
评论版:
cat add | sed -rn '/FIRST_LINE_REGEX/ { # if line matches /FIRST_LINE_REGEX/
:a # create label a
N # read next line into pattern space
/LAST_LINE_REGEX/ { # if line matches /LAST_LINE_REGEX/
/SOME_REGEX/p # print if line matches /SOME_REGEX/
d # return to start
}
ba # return to label a
}'
关于带有 sed 的正则表达式,跨多行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18045927/