私は単純なbash検索と置換スクリプト 'script.sh' を持っています:
#!/bin/bash
find . -type f -name '.' -exec sed -i '' "s/$1/$2/" {} +
コマンド ./script.sh foo bar を実行すると、機能します。ここで、2 つの入力文字列 $1 と $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
スクリプトを次のように呼び出すだけです。
./myscript "sentence 1 with spaces" "sentence 2"
ただし、特殊文字を「エスケープ」する必要がある場合があります (または sed 以外のものを使用します)。
g
seds/.../.../
コンストラクトに追加して、同じ行の複数のオカレンスを置き換えることができます。
また、sed のセパレーターとして/
使用するため、a を含む文字列を使用することはできません。/
(そのセパレーターは、たとえば、ありそうもない : など、任意のものに変更でき%
ます s%$1%$2%g
)
\ でスペースをスクリーニングしようとしましたか? 例: this\ is\ sample\ string\ with\ スペース