Bash 使用sed替换所有';使用\';及所有";用\";

Bash 使用sed替换所有';使用\';及所有";用\";,bash,sed,Bash,Sed,我想使用sed将所有'替换为\',将所有“替换为\”。输入示例: "a" 'b' 输出: \"a\" \'b\' 您的帖子中没有?字符,但我假设您的问题是“我如何做这样的替换?”。我刚刚用您的输入创建了一个快速测试文件,这个命令行似乎可以工作: sed -e 's#"#\\"#g' -e "s#'#\\\'#g" 例如: $ cat input "a" 'b' $ sed -e 's#"#\\"#g' -e "s#'#\\\'#g" input \"a\" \'b\' 虽然使用sed

我想使用sed将所有
'
替换为
\'
,将所有
替换为
\”
。输入示例:

"a" 'b'
输出:

\"a\" \'b\'

您的帖子中没有
字符,但我假设您的问题是“我如何做这样的替换?”。我刚刚用您的输入创建了一个快速测试文件,这个命令行似乎可以工作:

sed -e 's#"#\\"#g' -e "s#'#\\\'#g"
例如:

$ cat input 
"a" 'b'
$ sed -e 's#"#\\"#g' -e "s#'#\\\'#g" input 
\"a\" \'b\'

虽然使用
sed
是一种可移植的解决方案,但所有这些都可以使用
Bash
的内置字符串操作函数来完成

(
#set -xv
#str=$'"a" \'b\''
str='"a" '"'b'"  # concatenate 'str1'"str2"
str="${str//\"/\\\"}"
str="${str//\'/\'}"
echo "$str"
)

sed's/\'\'/g'(在我的另一个例子中用“for”代替)我几乎对你的答案投了赞成票,但我相信使用默认分隔符(
/
),除非有很好的理由不这样做(例如,模式或替换包含这样的字符)此外,由于
是注释字符,我更反对使用它,比如说
。当模式包含
\
/
字符时,我不喜欢使用
/
,这只会造成更多的混乱。我在这里使用
,因为它不在模式中我想
可以。