只有在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
答案 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)
答案 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