我从数据库中提取一些数据,而我回来的其中一个字符串在一行中,并包含字符串\n
的多个实例。这些不是换行符;它们实际上是字符串\n
,即反斜杠+ en或十六进制5C 6E。
我尝试过使用sed和tr删除它们但是它们似乎无法识别字符串而根本不会影响变量。这是在谷歌上搜索的一个难题,因为我得到的所有结果都是关于如何从字符串中删除换行符,这不是我需要的。
如何在bash中从变量中删除这些字符串?
示例数据:
\n\nCreate a URL where the client can point their web browser to. This URL should test the following IP addresses and ports for connectivity.
示例失败的命令:
echo "$someString" | tr '\\n' ''
操作系统:Solaris 10
Possible Duplicate - 除了这是在python中
答案 0 :(得分:5)
我怀疑你在使用\
时没有在替换中正确地逃避sed
。另请注意,tr
不适合此任务。
最后,如果您要替换变量中的\n
,那么模式替换(参数扩展的形式)是您最好的选项。
要替换变量中的\n
,可以使用Bash模式替换:
$ text='hello\n\nthere\nagain'
$ echo ${text//\\n/}
hellothereagain
要替换标准输入中的\n
,您可以使用sed
:
$ echo 'hello\n\nthere\nagain' | sed -e 's/\\n//g'
hellothereagain
注意两个示例中\
在模式中转义为\\
。
答案 1 :(得分:3)
tr
实用程序仅适用于单个字符,将它们从一组字符音译到另一组字符。这不是你想要的工具。
使用sed
:
newvar="$( sed 's/\\n//g' <<<"$var" )"
唯一值得注意的是\
中\n
的转义。我使用here-string(<<<"..."
)将变量var
的值提供给sed
的标准输入。
答案 2 :(得分:1)
你不需要外部工具,bash可以在它自己的基础上轻松有效地完成:
$ someString='\n\nCreate a URL where the client can point their web browser to. This URL should test the following IP addresses and ports for connectivity.'
$ echo "${someString//\\n/}"
Create a URL where the client can point their web browser to. This URL should test the following IP addresses and ports for connectivity.