4

sed(Linux ストリーム エディター)で一致する場合にのみ (特定の) 行を出力するにはどうすればよいですか? 一致基準を満たす場合にのみ印刷したい 3 行目があるとします。どうすればこれを印刷できますか?

コマンドの出力をにパイプしていますが、 の出力を再度パイプするためsedに使用したくありません。sedsed

| 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

私が理解しているように、特定の行番号とパターンの 2 つの基準に一致させたいと考えています。sed1 つのコマンドでそれを実現できます。

内容を仮定するinfileと:

one
two
three
four
five

一致する場合に 4 行目を出力する場合は、次のようにしurます。

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

これにより、次の結果が得られます。

four
于 2012-12-18T23:07:46.287 に答える
2

sedは、1行で単純に置換するための優れたツールですが、それ以外の場合はawkを使用します。

awk 'NR==3 && /state/'
于 2012-12-19T13:07:51.820 に答える
2

を使用:

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

ノート

  • パターンregex
  • exitファイル全体の解析を避ける
于 2012-12-18T22:58:50.647 に答える
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 に答える