如何删除文字字符串" \ n"来自bash变量的(不是换行符)?

时间:2016-07-26 21:05:40

标签: bash perl awk sed tr

我从数据库中提取一些数据,而我回来的其中一个字符串在一行中,并包含字符串\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中

3 个答案:

答案 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.