2016-07-07 8 views
1

猫はFile1私はパターンMNOザ・ファイル

MNO ABC 
MNO ABC 
ABC 
vzcbjzcb 

最終的なファイルが

MNO ABC 
MNO ABC 
zcvshskl 

を持つ必要がありますが含まれていないABCは、シェルスクリプトコマンドで

答えて

0
を助けてくださいパターンを削除したいです

私はPerlと次のように行きます:

perl -nle 's/ABC//g if !m/MNO/; print if length($_)' File1 

これは... "File1のすべての行を自動的に処理する(-nle)。行がMNOと一致しない場合は、ABCを何も置き換えない(置き換える)。それが空でない場合は行を印刷します。」

注これは、入力ファイル内の空行を保持しませんが、私はそれは問題ではありません信頼していること。

あなたはawkのでずっと同じことを行うことができます:

awk '!/MNO/{gsub(/ABC/,"")} length($0)' File1 

それともをセッド:

sed -e '/MNO/!s/ABC//g' -e '/^\s*$/d' File1 

あなたは本当に、本当にbashのでそれをしたい場合:

#!/bin/bash 
while read line; do 
    [[ ! $line =~ MNO ]] && line=${line/ABC/} 
    [ ${#line} -gt 0 ] && echo $line 
done < File1 
+0

が、それはシェル、私はバッシュを使用していますパール....(シェルスクリプト) – Shetty

+0

を使用していないことはできますが、なぜで可能ですあなたは?それは厄介で遅いです.Unixのポイントは、特定のことをうまくやり遂げる小さなプログラムを作成し、それらを連鎖させてより難しいことを達成することです。 'awk'、' sed'、 'Perl'はすべてこの種のものに優れています。 –

+0

私はこのコマンドをsed '/ MNO/s/ABC //' File1しかし、これは同じ行にパターンMNOを含むパターンABCを削除します、このコマンドを否定することは可能ですか? – Shetty

関連する問題