我是shell脚本的新手,我试图使用SED从每一行中删除新的行字符.这是我到目前为止所做的:
printf "{new\nto\nlinux}" | sed ':a;N;s/\n/ /g'
Run Code Online (Sandbox Code Playgroud)
仅删除Ist新行字符.我找到了这个命令:
printf "{new\nto\nlinux}" | sed ':a;N;$!ba;s/\n/ /g'
Run Code Online (Sandbox Code Playgroud)
但它给出了:"ba:未找到事件."
如果我做:
printf "{new\nto\nlinux}" | sed ':a;N;s/\n/ /g' | sed ':a;N;s/\n/ /g'
Run Code Online (Sandbox Code Playgroud)
然后它提供正确的输出,但我正在寻找更好的东西,因为我不知道当我运行脚本时我会得到多少新角色.传入流来自echo或printf或脚本中的某些变量.提前致谢
Wil*_*ell 83
要删除换行符,请使用tr:
tr -d '\n'
Run Code Online (Sandbox Code Playgroud)
如果要用单个空格替换每个换行符:
tr '\n' ' '
Run Code Online (Sandbox Code Playgroud)
该错误ba: Event not found
来自csh,是由于csh尝试匹配!ba
您的历史记录列表.您可以转义!
并编写命令:
sed ':a;N;$\!ba;s/\n/ /g' # Suitable for csh only!!
Run Code Online (Sandbox Code Playgroud)
但是sed是错误的工具,你最好使用一个更合理地处理引用字符串的shell.也就是说,停止使用csh并开始使用bash.
这可能对你有用:
printf "{new\nto\nlinux}" | paste -sd' '
{new to linux}
Run Code Online (Sandbox Code Playgroud)
要么:
printf "{new\nto\nlinux}" | tr '\n' ' '
{new to linux}
Run Code Online (Sandbox Code Playgroud)
要么:
printf "{new\nto\nlinux}" |sed -e ':a' -e '$!{' -e 'N' -e 'ba' -e '}' -e 's/\n/ /g'
{new to linux}
Run Code Online (Sandbox Code Playgroud)