替换管道字符“|”带有转义的 pip 字符“\|”在 bash 脚本中的字符串中
Replace pipe character "|" with escaped pip character "\|" in string in bash script
我正在尝试用其中的转义字符替换字符串中的竖线字符:
输入:"text|jdbc"
输出:"text\|jdbc"
我用 tr 尝试了不同的东西:
echo "text|jdbc" | tr "|" "\|"
...
但其中 none 有效。
任何帮助,将不胜感激。
谢谢,
tr
适用于字符的一对一映射(阅读 "translate")。
\|
是两个字符,您不能为此使用 tr
。您可以使用 sed
:
echo 'text|jdbc' | sed -e 's/|/\|/'
此示例替换了一个 |
。如果要替换多个,添加g
标志:
echo 'text|jdbc' | sed -e 's/|/\|/g'
@JuanTomas 的一个有趣提示是使用不同的分隔符以提高可读性,例如:
echo 'text|jdbc' | sed -e 's_|_\|_g'
您可以利用 |
是 bash
中的特殊字符这一事实,这意味着 printf
使用的 %q
修饰符将为您转义:
$ printf '%q\n' "text|jdbc"
text\|jdbc
不需要 |
特殊处理的更通用的解决方案是
$ f="text|jdbc"
$ echo "${f//|/\|}"
text\|jdbc
${f//foo/bar}
扩展 f
并用 bar
替换每个出现的 foo
。这里的运算符是/
;当后面跟着另一个 /
时,它会替换所有出现的搜索模式,而不仅仅是第一个。例如:
$ f="text|jdbc|two"
$ echo "${f/|/\|}"
text\|jdbc|two
$ echo "${f//|/\|}"
text\|jdbc\|two
你可以试试 awk
:
echo "text|jdbc" | awk -F'|' '=' OFS="\\|"
我正在尝试用其中的转义字符替换字符串中的竖线字符:
输入:"text|jdbc" 输出:"text\|jdbc"
我用 tr 尝试了不同的东西:
echo "text|jdbc" | tr "|" "\|"
...
但其中 none 有效。 任何帮助,将不胜感激。 谢谢,
tr
适用于字符的一对一映射(阅读 "translate")。
\|
是两个字符,您不能为此使用 tr
。您可以使用 sed
:
echo 'text|jdbc' | sed -e 's/|/\|/'
此示例替换了一个 |
。如果要替换多个,添加g
标志:
echo 'text|jdbc' | sed -e 's/|/\|/g'
@JuanTomas 的一个有趣提示是使用不同的分隔符以提高可读性,例如:
echo 'text|jdbc' | sed -e 's_|_\|_g'
您可以利用 |
是 bash
中的特殊字符这一事实,这意味着 printf
使用的 %q
修饰符将为您转义:
$ printf '%q\n' "text|jdbc"
text\|jdbc
不需要 |
特殊处理的更通用的解决方案是
$ f="text|jdbc"
$ echo "${f//|/\|}"
text\|jdbc
${f//foo/bar}
扩展 f
并用 bar
替换每个出现的 foo
。这里的运算符是/
;当后面跟着另一个 /
时,它会替换所有出现的搜索模式,而不仅仅是第一个。例如:
$ f="text|jdbc|two"
$ echo "${f/|/\|}"
text\|jdbc|two
$ echo "${f//|/\|}"
text\|jdbc\|two
你可以试试 awk
:
echo "text|jdbc" | awk -F'|' '=' OFS="\\|"