从传入的流中去除新行字符使用的sed(removing new line character fro

2019-06-24 12:03发布

我是新来的shell脚本,我试图从使用SED每行删除换行符。 这是我迄今所做的:

printf "{new\nto\nlinux}" | sed ':a;N;s/\n/ /g'

只删除IST换行字符。 我发现某处下面的命令:

printf "{new\nto\nlinux}" | sed ':a;N;$!ba;s/\n/ /g'

但它提供了:“BA:事件未找到”

如果我做:

printf "{new\nto\nlinux}" | sed ':a;N;s/\n/ /g' | sed ':a;N;s/\n/ /g'

然后它给正确的输出,但我在寻找更好的东西,因为我不知道有多少新的角色,当我运行该脚本,我会得到。 进入流是从回声或printf或者在脚本一些变量。 提前致谢

Answer 1:

要删除换行符,使用TR:

tr -d '\n'

如果你想用一个空格来代替每个换行:

tr '\n' ' '

错误ba: Event not found从CSH来了,是由于CSH试图匹配!ba在历史记录中。 你可以逃脱! 写命令:

sed ':a;N;$\!ba;s/\n/ /g'  # Suitable for csh only!!

但sed的是这个错误的工具,你会使用更合理的处理带引号的字符串壳会更好。 也就是说,停止使用csh,并开始使用bash。



Answer 2:

这可能会为你工作:

printf "{new\nto\nlinux}" | paste -sd' '            
{new to linux}

要么:

printf "{new\nto\nlinux}" | tr '\n' ' '            
{new to linux}

要么:

printf "{new\nto\nlinux}" |sed -e ':a' -e '$!{' -e 'N' -e 'ba' -e '}' -e 's/\n/ /g'
{new to linux}


文章来源: removing new line character from incoming stream using sed
标签: shell sed csh