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

Shell 仅在sed中匹配时打印特定行号,shell,sed,line,match,awk,Shell,Sed,Line,Match,Awk,如果sed(Linux流编辑器)中存在匹配项,如何打印(特定)行?假设我有第三行,我只想在它满足匹配条件时打印它;我如何打印这个 我正在将命令的输出传送到sed,并且不希望再次使用sed的输出传送到sed: | sed -ne ''"$currline"'p' | sed -n '/state/p'` 另外,我将输出分配给一个带有倒勾的变量 给定输入A和B以及搜索模式状态,A的输出应为行3无状态(注意,3是数据的一部分),B的输出应为零: Input A Input

如果
sed
(Linux流编辑器)中存在匹配项,如何打印(特定)行?假设我有第三行,我只想在它满足匹配条件时打印它;我如何打印这个

我正在将命令的输出传送到
sed
,并且不希望再次使用
sed
的输出传送到
sed

| sed -ne ''"$currline"'p' | sed -n '/state/p'`
另外,我将输出分配给一个带有倒勾的变量


给定输入A和B以及搜索模式
状态
,A的输出应为行
3无状态
(注意,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
与:

注意

  • 模式是一个
    regex
  • 退出
    避免解析整个文件

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

假设
infle
包含内容:

one
two
three
four
five
如果要打印第四行(如果与
ur
匹配),请使用:

sed -ne '4 { /ur/ { p; q } }' infile
这将产生:

four
3与第3行匹配;第3行的操作是“如果您发现
/state/
,请打印”;
-n
防止行的常规打印

此外,你应该避免反勾号;使用
var=$(cmd1 | cmd2)
表示法比使用
var=`cmd1 | cmd2`
表示法更好。

这可能适合您(GNU-sed):


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

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

有什么不符合grep的吗?请发布预期输出的示例您想将行或行号作为输出吗?我不清楚,我只是在找。非常感谢您的回答,我希望OP选择您的答案。
sed -n '3{/state/p;}' $file
sed '3!d;/state/q;Q' file
sed -ne '3!b' -e '/state/p' -e 'q' file
awk 'NR==3 && /state/'