xからyまでを除くすべての行を取得する

xからyまでを除くすべての行を取得する

次のファイルがあります。

A
B
C
D
E
F

2号線から4号線まで使用できます。sed -n 2,4p

2〜4を除くすべての行をどのように取得できますか?

答え1

あなたの例のコマンドはあなたが望むものとは正反対です。マニュアルページを読み、処理されたすべての行を印刷する-n無効なsedデフォルトの動作を確認してください。行印刷を無効にしてから、範囲内の行のみを明示的に印刷します2,4

1つの解決策は、デフォルトの行印刷を有効にしますが、sed範囲内の行を削除するように指示することです。

$ sed 2,4d << EOF
> A
B
C
D
E
F
> EOF
A
E
F

答え2

関数の前に!文字が続く可能性があります。この場合、アドレスがパターンスペースを選択しない場合は、その関数を適用する必要があります。

源泉)

あなたの場合、関数はで、pアドレスはです2,4

sed -n '2,4!p'

(アポストロフィ!シェルに特別な状況がある場合.)

答え3

IMHO awk構文は基本的な数学なので、もっと簡単です。

$ awk '(2 <= NR) && (NR <= 4)' file
B
C
D

$ awk '(NR < 2) || (4 < NR)' file
A
E
F

sed と同様に awk でもスコープ式を書くことができますが、必ずしも awk で書く必要はないので、明確さや保守性などの理由で書かないことをお勧めします。

答え4

awk '!(NR>=2 && NR<=4)' filename

出力

A
E
F

関連情報