仅在sed中匹配时才打印特定行号

时间:2012-12-18 22:53:36

标签: shell sed line match

只有在sed(Linux流编辑器)中存在匹配项时,如何打印(特定)行?假设我有第三行,只有符合匹配标准才能打印;我怎么打印这个?

我正在将命令的输出汇总到sed,并且不希望再次使用sed的输出来管道sed

| sed -ne ''"$currline"'p' | sed -n '/state/p'`

另外,我将输出分配给带有反引号的变量。


给定输入A和B以及搜索模式state,A的输出应该是行3 stateless(注意3是数据的一部分),而B应该是空的:

Input A              Input B
1 state              1 state
2 statement          2 statement
3 stateless          3 statless
4 stated             4 stated
5 estate             5 estate

5 个答案:

答案 0 :(得分:5)

sed -n '3{/state/p;}' $file

3匹配第3行;第3行的操作是'如果找到/state/,则打印'; -n阻止了一般的线条打印。

另外,你应该避免反击;最好使用var=$(cmd1 | cmd2)表示法而不是var=`cmd1 | cmd2`表示法。

答案 1 :(得分:3)

据我所知,你想要匹配两个标准,一个特定的行号和一个模式。您可以在一个sed命令中实现它。

假设infile包含内容:

one
two
three
four
five

如果要匹配ur,请打印第四行,请使用:

sed -ne '4 { /ur/ { p; q } }' infile

产量:

four

答案 2 :(得分:2)

使用

awk 'NR==3 && /pattern/{print;exit}'

注意

  • 模式regex
  • exit避免解析整个文件

答案 3 :(得分:2)

sed是一个很好的工具,可以在单行上进行简单的替换,但对于其他任何东西只需使用awk:

awk 'NR==3 && /state/'

答案 4 :(得分:1)

这可能适合你(GNU sed):

sed '3!d;/state/q;Q' file

sed -ne '3!b' -e '/state/p' -e 'q' file