2016-06-02 1 views
0

私は、.txtファイル内の特定の文字列を見つけ、変数で置き換えるスクリプトを実行しようとしています。私は元のファイルを変更するのではなく、コピーを行い、別の(特定の)ディレクトリに移動したいと思います。 (Unixスクリプト/変数からファイル内の文字列を置換し、別のディレクトリに移動

files.txt、 FILE2.TXT

最初のステップは、すべての.txtファイル内の文字列 "文字列1" と "string2の" を見つけて、コピーを行うことです file3.txt:さんは3つの.txtファイルを想定してみましょう例えばtmpファイル)。 もう1つは、変数$ 1と$ 2(tmpファイルを処理中)で文字列を置き換えることです。 それから、すべてを 'directoryname'ディレクトリに移動します。それが必要としてそれは、(別のディレクトリに正しい動き、TMPファイルを実行します)が、sedの機能はほとんど正しく動作しないです

#!/bin/bash 


echo "$1 - first parameter" 
echo "$2 - second" 



configurer() { 


for file in *.txt 

do 

    echo "Processing file .... $file" 

    orig_file=$file 

    tmp_file=$orig_file.tmp 

    cp $orig_file $tmp_file 


sed "s/string1/$1/g;s/string2/$2/g" $tmp_file 

    mv $tmp_file directorname/$orig_file 



done 

} 


configurer 



echo "Done ..." 

と私は見当がつかない:I'vが得たものだ

なぜ。誰か見てみることができますか?

答えて

1

試し変数

sed -i -e 's/string1/'"$1"'/g' -e 's/string2/'"$2"'/g' $tmp_file 

でsedを持つsedは、その常に問題以下 よろしくそれがコード

#!/bin/bash 
echo "$1 - first parameter" 
echo "$2 - second"  
configurer() { 
for file in *.txt 
do  
echo "Processing file .... $file"  
orig_file=$file  
tmp_file=$orig_file.tmp  
cp $orig_file $tmp_file 
sed -i -e 's/string1/'"$1"'/g' -e 's/string2/'"$2"'/g' $tmp_file 
mv $tmp_file directorname/$orig_file 
done } 
configurer $1 $2 
echo "Done ..." 
+0

のあなたの部分のための を動作するかどうか私に教えて今、私は「操作を動かす」ことに気付きますOKですが元のファイルを移動します...たとえsed "/ string1/'Mytext'/g; s/string2/Mytext2/g" $ tmp_fileを使用しても、Sed関数は一時ファイルでは実行されません... – bazyl

+0

申し訳ありませんが答えに-iスイッチを追加しました。 pls check –

+0

"string1"をNULL値で置き換えるのは不幸です。出力ファイルの変数からの値の代わりにヌルです:( – bazyl

関連する問題