我是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'
然后它给出了正确的输出,但我正在寻找更好的东西,因为我不确定当我运行脚本时我会得到多少新角色。 传入流来自echo或printf或脚本中的某些变量。 提前致谢
答案 0 :(得分:76)
要删除换行符,请使用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是错误的工具,你最好使用一个更合理地处理引用字符串的shell。也就是说,停止使用csh并开始使用bash。
答案 1 :(得分:6)
这可能对您有用:
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}