次のファイルがあります。
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