替换管道字符“|&引用;带转义的pip字符\|&引用;bash脚本中的字符串

替换管道字符“|&引用;带转义的pip字符\|&引用;bash脚本中的字符串,bash,tr,Bash,Tr,我试图用字符串中的转义字符替换字符串中的管道字符: 输入:“文本| jdbc” 输出:“文本\| jdbc” 我用tr做了不同的尝试: echo "text|jdbc" | tr "|" "\\|" ... 但没有一个成功。 任何帮助都将不胜感激。 谢谢,tr非常适合一对一的字符映射(阅读“translate”)。 \\\124;是两个字符,不能使用tr进行此操作。您可以使用sed: echo 'text|jdbc' | sed -e 's/|/\\|/' 此示例替换了一个|。如果要替换多个

我试图用字符串中的转义字符替换字符串中的管道字符:

输入:“文本| jdbc” 输出:“文本\| jdbc”

我用tr做了不同的尝试:

echo "text|jdbc" | tr "|" "\\|"
...
但没有一个成功。 任何帮助都将不胜感激。
谢谢,

tr
非常适合一对一的字符映射(阅读“translate”)。
\\\124;
是两个字符,不能使用
tr
进行此操作。您可以使用
sed

echo 'text|jdbc' | sed -e 's/|/\\|/'
此示例替换了一个
|
。如果要替换多个,请添加
g
标志:

echo 'text|jdbc' | sed -e 's/|/\\|/g'
一个有趣的提示是使用不同的分隔符以提高可读性,例如:

echo 'text|jdbc' | sed -e 's_|_\\|_g'
$ f="text|jdbc|two"
$ echo "${f/|/\\|}"
text\|jdbc|two
$ echo "${f//|/\\|}"
text\|jdbc\|two

您可以利用
|
bash
中的特殊字符这一事实,这意味着
%q
printf
使用的修饰符将为您转义:

$ printf '%q\n' "text|jdbc"
text\|jdbc
不需要特别处理
|
的更一般的解决方案是

$ f="text|jdbc"
$ echo "${f//|/\\|}"
text\|jdbc
${f//foo/bar}
展开
f
并用
bar
替换
foo
的每一次出现。这里的操作员是
/
;当后跟另一个
/
时,它将替换所有出现的搜索模式,而不仅仅是第一个。例如:

echo 'text|jdbc' | sed -e 's_|_\\|_g'
$ f="text|jdbc|two"
$ echo "${f/|/\\|}"
text\|jdbc|two
$ echo "${f//|/\\|}"
text\|jdbc\|two

您可以尝试使用
awk

echo "text|jdbc" | awk -F'|' '$1=$1' OFS="\\\|"

当我使用带有斜杠或反斜杠的模式的sed时,我喜欢使用
作为分隔符:
回显“text | jdbc”| sed-e的| | | | | | |
@JuanTomas这主意不错,添加到我的帖子
tr
中,虽然搜索中有两个字符。@janos,你用tr编写了
一对一映射
,但是该链接显示它是二对一的:
tr“\n”“|”
,因为
\n
@Timo
\n
是一个换行符。它是用两个字符写的,但实际上只有一个字符。