我是shell脚本的新手,我正在尝试使用SED从每行中删除新的行字符。这是我目前所做的:
printf "{new\nto\nlinux}" | sed ':a;N;s/\n/ /g'
只删除第一个换行符。我在某处找到了这个命令:
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或脚本中的一些变量。
3条答案
按热度按时间idfiyjo81#
要删除换行符,请使用tr:
如果要将每个换行符替换为单个空格:
错误
ba: Event not found
来自csh,这是由于csh试图匹配历史列表中的!ba
。您可以转义!
并编写以下命令:但是sed是一个不合适的工具,你最好使用一个能更合理地处理带引号的字符串的shell,也就是说,停止使用csh,开始使用bash。
jjjwad0x2#
这可能对你有用:
或:
或:
qrjkbowd3#
使用perl代替sed。perl与sed类似: