用“sed”替换带有反斜杠的字符并将其用于变量

用“sed”替换带有反斜杠的字符并将其用于变量

我有这个刺痛:the string's problem我想将其更改为:

file 'the string'\''s problem'

我的代码如下:

newline=`echo "$string" | sed "s/'/'\\\''/g"`
echo $newline | sed "s|$newline|file '$newline'|g" >> "$newPList"

但这样做的结果是:

file 'the string'''s problem'

有什么建议么?

答案1

不太复杂

$ str="string's problem"
$ sed 's/'\''/&\\&&/g' <<<"$str"
string'\''s problem
$ new="file '$(sed 's/'\''/&\\&&/g' <<<"$str")'"
$ echo "$new"
file 'string'\''s problem'

"$new" 使用变量时引用它至关重要。

答案2

这是perl一行代码,全部合而为一,无需额外的字符串构造;)

$ perl -pe "s/^(.*)'(.*)$/file '\$1\'\\\'\'\$2'/" <<< "the string's problem"
file 'the string'\''s problem'

相关内容