終了式が存在する場合は、2つの式の間にテキストを印刷します(sed -n)。

終了式が存在する場合は、2つの式の間にテキストを印刷します(sed -n)。

それで、ファイルの2つの式の間にあるすべてのテキストを表示したいと思います。

文書

ddd
eee
aaa
vvv
bbb
nnn
cdn
dds
aaa
xxx
xxx
xxx

したがって、次のコマンドを使用してください

cat $file |sed -n "/aaa/,/cdn/p"

わかりました。

aaa
vvv
bbb
nnn
cdn
aaa
xxx
xxx
xxx

どちらが正しいですか?

しかし、私は開始式と終了式「間」のテキストだけが欲しいです。だから、閉じた表現なしでテキストを表示したくありません...

だから私はこの結果を得る方法を探しています。

aaa
vvv
bbb
nnn
cdn

ベストアンサー1

$ sed -n '/aaa/,/cdn/ { /aaa/h; //!H; /cdn/ { g; p; }; }' file
aaa
vvv
bbb
nnn
cdn

これは、試行中のコマンドと同じ範囲を使用しますが、その範囲内で一致する場合は予約済みスペースに行を保存し、aaa一致しない場合は予約済みスペースに行を追加してから予約済みaaaスペースをインポートして印刷します。一致する場合cdn

aaaこれにより、ファイル内の両方(または両方)が繰り返される「最も狭い」領域が抽出されます。つまり、次のような入力を意味します。cdnaaacdn

111
111
aaa
222
222
aaa
333
333
cdn
444
444
cdn

あなたに与える

aaa
333
333
cdn

...代わりに最初 aaa到着最後 cdn


以下を使用せずに同じ内容を表現する別の方法-n

sed -e '/aaa/,/cdn/!d' -e '/aaa/h' -e '//!H' -e '/cdn/!d' -e g file

おすすめ記事