2011-03-15 75 views
0

我已经搜索了高和低,并希望你能帮助我。我需要找到不带双引号(“)开始一个文件中的每一行,该行追加到上一行sed替代使用&符号(&)

我已经成功使用以下命令这样做:

猫FILNAME .csv | sed -e:a -e'$!Ns/\ n [^“] //; ta -e'P; D'> newfilename.csv

我的问题是替换。正如您在将该行追加到前一行后所期望的那样,第一个字符将被删除。我需要它不会被删除。我试过 cat filname.csv | SED -e:一个-e“!$ NS/\ n [^“]/& /; TA -e 'P; d'> newfilename.csv

,但它只是挂我以为号(&)将复制匹配线

输入:

"line 1 
<line 2> 

输出与现有的或第一sed命令是: lineline2>* *注意去除<

我需要的输出是line1<line2>

任何帮助,你可以提供将非常感谢!

回答

0

我似乎无法得到您的原始命令工作。你有没有在某处留下单引号?

假设原来的命令的工作,而且我记得SED的作品,我只想用反向引用,就像这样:

的sed -e:一个-e“$ NS/\ n([^“] )/ \ 1 /; TA -e 'P; d'

(加入括号并用\ 1)

0

您缺少闭单引号所以壳解释符号作为对请求更换&后台操作。试试:

sed -e ':a' -e '$!Ns/\n\([^"]\)/\1/;ta' -e 'P;D' filname.csv > newfilename.csv 

无论如何你都不能使用&符号,因为那样会保留换行符。

0

你也可以做到这一点使用awk:

awk '{if (NR>1 && $1 ~ "^\"") print "" ; printf $0 } END {print ""}' filname.csv > newfilename.csv 
0
$ cat file 
"line 1 
<line 2> 
"line 3 
<line 4> 

$ awk 'ORS=/^\042/?" ":"\n"' file 
"line 1 <line 2> 
"line 3 <line 4> 

,或者你可以使用红宝石(1.9+)

$ ruby -ne 'print /^"/? $_.chomp: $_' file 
"line 1<line 2> 
"line 3<line 4>