更换前的Sed编辑选择

时间:2016-05-10 09:02:29

标签: unix sed

我需要在执行替换之前编辑sed选择...种类的嵌套查询

以下是file.csv的前两行

"some text over one line"||02/21/2015 00:00:00||54.34||0.234     
"some text over 
multiple
lines"||02/21/2015 00:00:00||64.24||0.432 

我想从第一列中删除换行符 - 第一个分隔符||之前的所有内容

此命令收集每一列并允许我单独引用它们

sudo sed -i 's/\(.*\)||\(.*\)||\(.*\)||\(.*\)/\1||\2||\3||\4/g' file.csv 

我现在需要在替换之前编辑\1。与另一个sed命令sed -i ':a;N;$!ba;s/\n//g' file.csv一致的东西 - 但仅适用于\1而不是整个文件

输出应该如下所示

"some text over one line"||02/21/2015 00:00:00||54.34||0.234
"some text over multiple lines"||02/21/2015 00:00:00||64.24||0.432

1 个答案:

答案 0 :(得分:0)

sed可以做到,但你必须玩保持空间。 awk有printf,您可以更轻松地控制输出格式:

awk '{printf "%s%s",(/^"/&&NR>1)?RS:"",$0}' file

将适用于给定的示例。

P.S。如果您正在寻找仅限sed的解决方案,请发表评论,我将删除答案。