0

私は単純なbash検索と置換スクリプト 'script.sh' を持っています:

#!/bin/bash 
find . -type f -name '.' -exec sed -i '' "s/$1/$2/" {} +

コマンド ./script.sh foo bar を実行すると、機能します。ここで、2 つの入力文字列 $1 と $2 が (空白を含む) 文であるとします。スクリプトがそれぞれを文字列全体として認識するようにするにはどうすればよいでしょうか?

4

3 に答える 3

2

各文を引用符で囲みます"

#!/bin/bash
echo $1
echo $2

出力

$ ./tmp.sh "first sentence" "second sentence"
first sentence
second sentence

編集:

これを試して:

#!/bin/bash
find . -type f -exec sed -i "s/$1/$2/" {} +

出力:

$ cat test1.txt 
ola sdfd
$ ./tmp.sh "ola sdfd" "hello world"
$ cat test1.txt 
hello world
$ ./tmp.sh "hello world" "ols asdf"
$ cat test1.txt 
ols asdf
于 2013-01-31T11:05:52.200 に答える
0

スクリプトを次のように呼び出すだけです。

./myscript  "sentence 1 with spaces" "sentence 2"

ただし、特殊文字を「エスケープ」する必要がある場合があります (または sed 以外のものを使用します)。

gseds/.../.../コンストラクトに追加して、同じ行の複数のオカレンスを置き換えることができます。

また、sed のセパレーターとして/使用するため、a を含む文字列を使用することはできません。/(そのセパレーターは、たとえば、ありそうもない : など、任意のものに変更でき%ます s%$1%$2%g

于 2013-01-31T11:14:43.390 に答える
0

\ でスペースをスクリーニングしようとしましたか? 例: this\ is\ sample\ string\ with\ スペース

于 2013-01-31T11:06:43.423 に答える