パターンと一致しない行を削除するためにこれを使用します。
$ egrep "pattern1|pattern2|pattern3|pattern4|pattern5"
ただし、これを自動的に実行する必要があるため、次のように変数を設定しました。
$ catTMP=~/mpp/*.xml
私は次のようなものを実行したいと思います:
$ egrep "pattern1|pattern2|pattern3|pattern4|pattern5" $catTMP > $catTMP.2
^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^__^Here^
既存の変数に基づいてリダイレクト名をどのように設定しますか?まだ理解していない場合は、私の言葉は次のとおりです。
$ cd ~/mpp/
$ ls
x.xml
$ egrep "pattern1|pattern2|pattern3|pattern4|pattern5" $catTMP > $catTMP.2
$ ls
x.xml x.xml.2
または、その場で編集する方が良いかもしれませんが、grep
そうすることはできませんので、他のコマンドを使用してこれを行う方法があるかもしれません-i
。
ベストアンサー1
パターンに一致する行だけを保持して、その場で編集します。
sed -n -r -i "/(pattern1|pattern2|pattern3|pattern4|pattern5)/p" ~/mpp/*.xml
BSD sed
(Mac OSX)では、以下を試してください。
sed -n -E -i '' "/(pattern1|pattern2|pattern3|pattern4|pattern5)/p" ~/mpp/*.xml
既存の変数に基づくファイル名
for fname in ~/mpp/*.xml
do
egrep "pattern1|pattern2|pattern3|pattern4|pattern5" "$fname" > "$fname.2"
done
上記の方法は、変数名にピリオドが適していないために機能します。したがって、シェルは$fname.2
変数名があることを知っていますfname
。それ以外の場合は中括弧が必要です。たとえば、
for fname in ~/mpp/*.xml
do
egrep "pattern1|pattern2|pattern3|pattern4|pattern5" "$fname" > "${fname}_2"
done
ここで中かっこは変数名であり、シェルにではないことをfname
示しますfname_2
。