Bash 如何使用sed转义文件中的任何反斜杠

Bash 如何使用sed转义文件中的任何反斜杠,bash,shell,sed,Bash,Shell,Sed,嗨,我有一个文件,里面有一个数组格式的字符串,我使用jq循环遍历每个索引,并且有一些逻辑依赖于每个索引上的字符串。但是,有一个反斜杠字符,jq返回无效的转义字符。所以我想我需要摆脱这种强烈的反弹。如何使用sed实现这一点 例如: ["*","*Cases","*/opt/selenium/tests/src/test/cases","*../../src/test/cases","*01 Login","*/opt/selenium/tests/src/test/cases/01_login.r

嗨,我有一个文件,里面有一个数组格式的字符串,我使用jq循环遍历每个索引,并且有一些逻辑依赖于每个索引上的字符串。但是,有一个反斜杠字符,jq返回无效的转义字符。所以我想我需要摆脱这种强烈的反弹。如何使用sed实现这一点

例如:

["*","*Cases","*/opt/selenium/tests/src/test/cases","*../../src/test/cases","*01 Login","*/opt/selenium/tests/src/test/cases/01_login.robot","*../../src/test/cases/01_login.robot","*TC001 Verify the login","*<p>If member has clicked 'Remember Me' check box, after the deployment, it's not necessary to input account and password when login. Web do not have the 'Remember Me' function\x3c/p>","*Login button is not visible after 60 seconds"]
[“*”、“*Cases”、“*/opt/selenium/tests/src/test/Cases”、“*../../src/test/Cases”、“*01 Login”、“*/opt/selenium/tests/src/test/Cases/01_Login.robot”、“*TC001验证登录”,“*如果成员已单击“记住我”复选框,则在部署后,登录时无需输入帐户和密码。Web没有“记住我”功能\x3c/p>”,“*登录按钮在60秒后不可见”]

您可以在
sed
中使用
\/
进行如下转义:

sed -i "s#\/#\\\/#g" filename

您编写的代码希望转义任何反斜杠(
\
),而不是斜杠(
/
)。假设转义字符本身就是反斜杠,则应执行以下操作:

sed -i 's/\\/\\\\/g' filename
这可能会变得更短:

sed -i 's/\\/&&/g' filename
但是在替换中使用文本而不是变量
&
更有效

如果您刚刚输入了一种类型的拼写错误,而希望用反斜杠转义斜杠,那么以下命令就足够了:

sed -i 's|/|\\/|g' filename

(因为我使用了
|
而不是
/
,所以我不需要在替换中转义
/

该错误可能是由其中一个字符串文本中出现的转义序列
\x3c
引起的。
这是JavaScript中有效的转义序列(它代表字符<代码>请不要只发布代码作为答案,还要解释代码的作用以及如何解决问题。带有解释的答案通常质量更高,更有可能吸引更多的选票。请添加几句话来解释代码的作用,这样您就可以为您的答案获得更多的投票。在这里,转义所有反斜杠是一种非常直截了当的方法,因为它会破坏潜在的有效转义序列。您的问题在于
\x3c
,它在JavaScript中有效,但在JSON中无效。用
\u003C
替换
\u003C
(两者都应该表示

sed 's/\\x\([0-9A-Fa-f]\{2\}\)/\\u00\1/g' poorjson.txt
["*","*Cases","*/opt/selenium/tests/src/test/cases","*../../src/test/cases","*01 Login","*/opt/selenium/tests/src/test/cases/01_login.robot","*../../src/test/cases/01_login.robot","*TC001 Verify the login","*<p>If member has clicked 'Remember Me' check box, after the deployment, it's not necessary to input account and password when login. Web do not have the 'Remember Me' function\u003c/p>","*Login button is not visible after 60 seconds"]