2011-07-04 27 views
1

私は、テキストファイルのいくつかの単語を置き換えるためにsedコマンドを使用しています。このコマンドはkshスクリプトに組み込まれています。 私は、いつも条件が満たされている場合に限り、sed火のすべての置換ルールが毎回そうなるとは限りません。例えば。シェル変数の値によって異なります。kshスクリプトのsedを条件付きで使用する

つまり、私はこの文をif文なしで書いておきたいのですが、sedの中に条件式を含めることにします。出来ますか?

REPLACE_A=TRUE 

if [ "$REPLACE_A" = "TRUE" ] 
then 
    cat myfile \ 
    | sed 's/A/B/g; 
      's/C/D/g; 
      's/E/F/g;' 
else 
    cat myfile \ 
    | sed 's/C/D/g; 
      's/E/F/g;'  
fi 
+0

sedのような条件を適用することはできませんが、間違っている可能性があります。 – EdoDodo

+0

私は@EdoDodoに同意します - 私はそれが可能ではないと思います: 'sed'は細かいストリームエディタですが、条件文は行いません。そして、なぜあなたの 'ksh'スクリプトを* less *の読みやすいものにしたいのですか? – pavium

+0

私は置き換える言葉のリストが非常に長いです。新しい状態を適用しなければならない場合、私はそれらを数回リストしたくありません。 –

答えて

2

私の心の中にポップ唯一の解決策は

# in your script 
SEDCMD="" 
# ... 
SEDCMD="s/A/B/g;" 
# later 
SEDCMD="${SEDCMD}s/C/D/g;" 
# ... 
# finally 
sed "$SEDCMD" FILE 

のように、変数にsedコマンドを格納することですしかしそれでもあなたが望む解決策はありません。

+0

それは私が望んでいたものではありませんが、それは私に合っています。ありがとう! –

0

あなたはsedでは実行できませんが、awkでは実行できません。あなたは試してみたい場合は、私はあなたがこれを見て持ってお勧め:

http://www.grymoire.com/Unix/Awk.html

関連する問題