web-dev-qa-db-ja.com

sedを使用して大文字と小文字を区別しない一致行を削除する

大文字と小文字を区別しない正規表現を照合し、同時に削除するにはどうすればよいですか

大文字と小文字を区別しない一致を取得するには、フラグ「i」を使用することを読みました

sed -e "/pattern/replace/i" filepath

および使用を削除するにはd

sed -e "/pattern/d" filepath

2iwのような複数のフラグを組み合わせることができることも読みました

Sedがiとdの両方を組み合わせることができるかどうか知りたいのですが、次のことを試しましたが、うまくいきませんでした

sed -e "/pattern/replace/id" filepath > newfilepath
32
eruina

大文字と小文字を区別しない場合は/I の代わりに /i

sed -e "/pattern/Id" filepath
48
Mark Byers

(g)awkも使用できます。

# print case insensitive
awk 'BEGIN{IGNORECASE=1}/pattern/{print}' file

# replace with case insensitive
awk 'BEGIN{IGNORECASE=1}/pattern/{gsub(/pattern/,"replacement")}1' file

または、シェル(bash)のみを使用

#!/bin/bash
shopt -s nocasematch
while read -r line
do
    case "$line" in
        *pattern* ) echo $line;
    esac
done <"file"
1
ghostdog74