grepを使用してファイルから複数行を削除する

grepを使用してファイルから複数行を削除する

次のような複数行を含むファイルがあります。

ブランド、モデル、インチ、価格

dell       xps      13    9000     
macbook    pro      13    13000
asus       zenbook  13    10500

価格が10,000を超える行を削除したいです。 grepを使用できますか?

答え1

次のコマンドを使用して、価格が10000を超える行を取得できます。

$ grep -E '.* [0]*[1-9][0-9]{4,}$' file.txt 
macbook    pro      13    13000
asus       zenbook  13    10500

この行を削除するには、以下を追加します-v

$ grep -vE '.* [0]*[1-9][0-9]{4,}$' file.txt 
dell       xps      13    9000     
  • .*価格を含む最後の列の前のすべての文字と一致します。

  • [1-9]価格の最初の数字と一致

  • [0-9]{4,}$最初の数字の後に4つ以上の数字が一致するため、合計5つの数字があります。つまり10000以上を意味します。

答え2

可能ですが、grep数値ではなく文字列に対して機能する正規表現を使用します。

grep -v '[0-9]\{5\}$' input.txt

-v一致する行を削除します。前のコンテンツがn回繰り返されたことを示す[0-9]任意の数字と一致します\{n\}(この例では5回、つまり10,000回以上)。$行の終わりと一致します。

awk数値を比較できるので、作業に適しています。

awk '$4<10000{print}' input.txt

またはパール:

perl -ane 'print if $F[-1] < 10000' input.txt

答え3

例の入力を考えると、次のようになります。

$ cat /tmp/foo
dell       xps      13    9000
macbook    pro      13    13000
asus       zenbook  13    10500

awkを使用できます。

$ awk '{ if ($4 <= 10000) print; }' /tmp/foo
dell       xps      13    9000

答え4

努力する

cp input.txt original.txt
awk 'NR==1 || $4 < 10000 ' original.txt > input.txt

どこ

  • 条件 NR==1 はヘッダー行を保持します。

関連情報