1

我查看了一个非常相似的问题,但无法解决问题Replace comma with newline in sed

我正在尝试转换:字符串中的字符。这是我尝试过的:

echo -e 'this:is:a:test' | sed "s/\:/'\n'/g"

但这用 n 代替:我也尝试了 tr 但结果相同。我相信 -e 在通过管道传输后看不到,因此无法识别新行。

任何帮助表示赞赏。

4

4 回答 4

5
echo 'this:is:a:test' | tr : \\n

任何符合 POSIX 的 tr都将支持\n转义序列。但是,您需要注意引用或转义转义序列(上面的双反斜杠)。

echo的-e参数对 echo 的参数没有影响。

于 2013-05-15T13:31:12.637 回答
4

我假设您已经在变量中有字符串。这使用参数扩展替换运算符将 every 替换:为换行符,该换行符使用带$'...'引号的字符串指定。这两个功能都是bash对标准的扩展,可能无法在另一个 shell 中工作。

$ foo="this:is:a:test"
$ bar="${foo//:/$'\n'}"
$ echo "$bar"
this
is
a
test
于 2013-05-15T13:29:39.443 回答
1

你不需要echo -e,因为你有\nin sed,而不是 inecho声明。因此,以下应该有效(请注意,我已更改'\n'\n):

echo -e 'this:is:a:test' | sed "s/\:/\n/g"

或者

echo  'this:is:a:test' | sed "s/\:/\n/g"

另请注意,您不需要转义:,因此以下内容也可以使用(感谢@anishsane)

echo  'this:is:a:test' | sed "s/:/\n/g"

下面只是重申你为什么-e需要echo

$ echo -e "hello \n"
hello

$ echo  "hello \n"
hello \n
于 2013-05-15T13:28:40.733 回答
1

也许 Perl 是一种选择?

echo -e 'this:is:a:test' | perl -p -e 's/:/\n/g'
于 2013-05-15T13:30:08.517 回答