2017-08-16 12 views
-1

私は、いくつかのファイルでglobal文字列置換を行う小さなスクリプトを用意しています。影響を受ける行だけが変更されるように、これはsedで行う必要があります。スクリプト内の変数でsedが期待どおりに動作しない

準備:

#!/bin/sh 
find="Mücke Motorsport" 
replace="Mücke Motorsport Racing Team" 
file="/Users/meyer/Dropbox/Dev/App Framework iOS/dev/myfile.txt" 

これは、スクリプト内の私の問題の行です:

sed -i s/"$find"/"$replace"/g "$file" 

は(sed: 1: "/Users/meyer/Dropb ...": invalid command code o)が動作しません。次に試してください:

sed -i 's/'"$find"'/'"$replace"'/g' "$file" 

sed: 1: "/Users/meyer/Dropb ...": invalid command code o)が動作しません。次に試してください:

sed -i "s/$find/$replace/g" "$file" 

は機能しません(sed: 1: "/Users/meyer/Dropb ...": invalid command code o)。次に試してください:

sed -i s/$find/$replace/g "$file" 

sed: 1: "Motorsport/Mücke": invalid command code M)が動作しません。 ...私はこの作業を取得する方法を知っている

escaped_ find =$(printf '%s\n' "$find" | sed 's:[][\/.^$*]:\\&:g') 
escaped_ replace =$(printf '%s\n' "$replace" | sed 's:[\/&]:\\&:g;$!s/$/\\/') 

しかし、変数を置き換えるdoes't作業の利用ドント:(

+0

どのOSをお使いですか? –

+0

これはエンコードの問題でしょうか?この記事を参照してください:https://stackoverflow.com/questions/67410/why-does-sed-fail-with-international-characters-and-how-to-fix 'sed -i" s/$ find/$ replace/g "" $ file "'は私のために働きます。 – piarston

+0

@YuriyZhigulskiy私はMac OS(10.11 El Capitan) –

答えて

2

をオン:ので、私は私の変数を脱出しようとしたこのエラーメッセージのSEDのOSX版、拡張引数とファイルパスがコマンドコードとして解釈されるよう、あなたのコマンドが実際に解析されるように、-iオプションが拡張引数を期待しています。

-e引数を明示的
sed -i'' -e 's/old/new/g' file

を追加してみてください
+0

それはそれです!ありがとう! –

関連する問題