0

我有一个简单的 bash 查找和替换脚本 'script.sh' :

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

当我运行命令 ./script.sh foo bar 时,它可以工作。假设现在我的两个输入字符串 $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

你试过用\屏蔽空格吗?例如:this\ is\ sample\ string\ with\ 空格

于 2013-01-31T11:06:43.423 回答
0

您只需将脚本称为:

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

但是您可能必须“转义”特殊字符(或使用 sed 以外的其他字符)

您可能想要添加g到 seds/.../.../构造,以便它替换同一行上的多个出现。

而且你不能有一个带有 a 的字符串/,因为你/用作 sed 的分隔符。(您可以将该分隔符更改为任何内容,例如不太可能的%:) s%$1%$2%g

于 2013-01-31T11:14:43.390 回答