用 sed 替换 '\t'
Replacing '\t' with sed
虽然许多帖子都解决了 sed 中制表符的替换问题,但 none 对我有用,就像在这个 C 语句中一样替换 '\t':
char c = '\t'; // to become char c = MMM;
我尝试了以下食谱并且none成功了:
"s/'\t'/MMM/g"
"s/'\t'/MMM/g"
"s/' '/MMM/g" // I pressed the <TAB> key
感谢任何帮助。
如果您从 shell 调用 sed,您可能会成为 shells 字符串处理的受害者。也就是说,应该传递给 sed
的字符串应该是 "s/'\t'/MMM"
(其中双引号 "
不是字符串的一部分)。
大多数 shell 从传递的参数中删除一级反斜杠("\"
作为 "\"
传递)。因此你需要加倍。
对于单引号字符串,情况并非如此('\t'
作为 '\t'
传递)。由于您的模式包含单引号,因此在这种情况下您必须将其重写为 's/'\''\t'\''/MMM/'
。
$ sed "s/'\\t'/MMM/" <<<"char c = '\t';"
char c = MMM;
但你不会真的写 4 个转义符,你只需要使用括号表达式:
$ sed "s/'[\]t'/MMM/" <<<"char c = '\t';"
char c = MMM;
或者避免将脚本的其余部分暴露给 shell:
$ sed 's/'\''\t'\''/MMM/' <<<"char c = '\t';"
char c = MMM;
这是不同之处 - 假设您要将 \t
替换为 costs
:
而不是 MMM
$ sed 's/'\''\t'\''/costs /' <<<"char c = '\t';"
char c = costs ;
$ sed "s/'[\]t'/costs /" <<<"char c = '\t';"
char c = costs 5;
双引号脚本失败,因为您将其暴露给 shell 进行解释,并且根据您的 shell,它将 </code> 读作 <code>
(传递给 shell 的第 2 个位置参数的值)然后 5
.
虽然许多帖子都解决了 sed 中制表符的替换问题,但 none 对我有用,就像在这个 C 语句中一样替换 '\t':
char c = '\t'; // to become char c = MMM;
我尝试了以下食谱并且none成功了:
"s/'\t'/MMM/g"
"s/'\t'/MMM/g"
"s/' '/MMM/g" // I pressed the <TAB> key
感谢任何帮助。
如果您从 shell 调用 sed,您可能会成为 shells 字符串处理的受害者。也就是说,应该传递给 sed
的字符串应该是 "s/'\t'/MMM"
(其中双引号 "
不是字符串的一部分)。
大多数 shell 从传递的参数中删除一级反斜杠("\"
作为 "\"
传递)。因此你需要加倍。
对于单引号字符串,情况并非如此('\t'
作为 '\t'
传递)。由于您的模式包含单引号,因此在这种情况下您必须将其重写为 's/'\''\t'\''/MMM/'
。
$ sed "s/'\\t'/MMM/" <<<"char c = '\t';"
char c = MMM;
但你不会真的写 4 个转义符,你只需要使用括号表达式:
$ sed "s/'[\]t'/MMM/" <<<"char c = '\t';"
char c = MMM;
或者避免将脚本的其余部分暴露给 shell:
$ sed 's/'\''\t'\''/MMM/' <<<"char c = '\t';"
char c = MMM;
这是不同之处 - 假设您要将 \t
替换为 costs
:
MMM
$ sed 's/'\''\t'\''/costs /' <<<"char c = '\t';"
char c = costs ;
$ sed "s/'[\]t'/costs /" <<<"char c = '\t';"
char c = costs 5;
双引号脚本失败,因为您将其暴露给 shell 进行解释,并且根据您的 shell,它将 </code> 读作 <code>
(传递给 shell 的第 2 个位置参数的值)然后 5
.