複数の検索文字列を使用してsed行を削除する

複数の検索文字列を使用してsed行を削除する

テキストファイルがありますが、test1.txt犬と日付を含む行を削除する必要があるとします。"29-APR-2015"

これを行うには、次のコマンドを使用します。ただし、行は削除されません。

/DOG/d私が言及したのは、単にインクルードを削除するのと同じですDOG

コマンドファイル(sedcommands)

/DOG,29-APR-2015/d

テスト1.txt

DOG          29-APR-2015          
DOG          29-APR-2015          
DOG          30-APR-2015          
CAT          29-APR-2015          
CAT          29-APR-2015          

注文する

sed -f sedcommands test1.txt > test2.txt

答え1

GNU sedの使用:

sed '/DOG/{/29-APR-2015/d}' test1

この方法では、すべての注文が可能です。つまり。DOGこの日付の前または後にすることができます。

答え2

POSIX的に:

sed -e '/DOG/!b' -e '/29-APR-2015/!b' -e d file

bタグを提供しない場合は、最後まで牧場をしてください。

または:

sed '/DOG/{/29-APR-2015/d
}' file

最新の実装はPOSIXで許可されていますが、必須ではない拡張フォームもサポートしていますsed{command;}

sed '/DOG/{/29-APR-2015/d;}' file

答え3

/DOG,29-APR-2015/dDOGとの間にカンマがないため、機能しません9-APR-2015。この試み。

$ sed -e '/DOG[[:space:]]*29-APR-2015/d' test1.txt 
     DOG          30-APR-2015          
     CAT          29-APR-2015          
     CAT          29-APR-2015   

[[:space:]]*DOGとの間にはゼロ個以上の空白文字が許可されています9-APR-2015。文字クラスは[:space:]通常のスペースとタブを受け入れ、Unicodeフォントで使用しても安全です。

答え4

コマンドファイルには次のものを含める必要があります。

/DOG *29-APR-2015/d

つまり、その後DOGにはゼロ個以上のスペースが続き、その後には指定された日付が続きます。

関連情報