4

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
4

5 回答 5

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

3 匹配第 3 行;第 3 行的操作是“如果你找到/state/,打印”;防止-n一般打印行。

此外,您应该避免使用反引号;使用var=$(cmd1 | cmd2)符号比使用符号更好var=`cmd1 | cmd2`

于 2012-12-19T01:22:12.733 回答
3

据我了解,您想要匹配两个条件,一个特定的行号和一个模式。sed您可以在一个命令中实现它。

假设infile内容:

one
two
three
four
five

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

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

这会产生:

four
于 2012-12-18T23:07:46.287 回答
2

使用

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

笔记

  • 模式是一个regex
  • exit避免解析整个文件
于 2012-12-18T22:58:50.647 回答
2

sed 是用于在单行上进行简单替换的出色工具,但对于其他任何事情,只需使用 awk:

awk 'NR==3 && /state/'
于 2012-12-19T13:07:51.820 回答
1

这可能对您有用(GNU sed):

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

或者

sed -ne '3!b' -e '/state/p' -e 'q' file
于 2012-12-19T07:10:55.187 回答