Bash脚本用sed替换包含空格的任意输出字符串的任意输入字符串

时间:2017-06-21 17:19:20

标签: string bash sed replace

我是Bash的新手,我正在尝试创建一个bash函数:

1)在我当前目录的子文件夹中查找与递归($1)匹配的所有文件名

2)找到并替换与变量字符串($2)中的模式匹配的整行与第二个变量字符串($3

我认为我大部分时间都在那里,但是在替换包含空格的文本字符串时遇到了麻烦。我目前的功能如下:

rplcPhrase() {
    find . -name $1 -exec sed -i "/$2/c $3" {} + 
}

rplcPhrase $1 $2 $3

和命令行输入看起来像

/link/to/file.sh "filetochange.txt" "\!phrase[[:space:]]to[[:space:]]change" "replacement[[:space:]]phrase"

研究类似问题已经解释了需要“逃避”特殊字符(例如“!”)以便在模式中使用,并且必须在搜索模式中使用[[:space:]]来考虑空格。但是,我想返回一个包含空格的短语。上面命令行输入的结果正确找到模式

!phrase to change

但用

代替
replacement[[:space:]]phrase

如果我改为使用replacement[[:space:]]phrase更改replacement phrase,则只会产生

replacement

就像我说的那样,我觉得我差不多就在那里,我只是错过了一些简单的事情。任何帮助,将不胜感激。

我已经搜索过这个,但找不到能解决我问题的解决方案。查看链接: Replace whole line containing a string using Sed

Using sed to replace text with spaces with a defined variable with slashs

1 个答案:

答案 0 :(得分:1)

您需要引用变量以防止分词和通配符扩展。

rplcPhrase() {
    find . -name "$1" -exec sed -i "/$2/c $3" {} + 
}

rplcPhrase "$1" "$2" "$3"