我有一个结构文件
"name1";"surname1";23;44
"name2";"surname2
www.so.org/443";56;33
"name3";"surname3";223;4554
"name4";"surname5
surname@so.net";77;889
我需要一个输出:
"name1";"surname1";23;44
"name2";"surname2 www.so.org/443";56;33
"name3";"surname3";223;4554
"name4";"surname5 surname@so.net";77;889
这里的模式在行的开头是字母数字,而不是\“。我想将具有此模式的行粘贴到上面的行。
编辑:
我正在使用Debian稳定版。
我使用过sed,但我意识到它是流编辑器,我认为它无法将行粘贴到上一个(错误的)。
sed -e 's/^[a-z:A-Z]/ /g'
只会帮助我找到正确的行。
我的第二次试用是在文本编辑器中进行的。我使用emacs打开了文件,并使用了M-x replace-regexp
,并使用了^J[a-zA-Z]
找到了对应的行,然后什么也没有替换。它完成了工作,但它也删除了第一个字符,我需要在单个空格后输入它。
答案 0 :(得分:2)
这个awk单线应帮助您:
awk '{printf "%s%s",(/^"/&&NR>1?RS:""),$0}END{print ""}' file
问题的关键在于确定我们何时应该输出/打印换行符。
这种单线甚至适用于以下格式:
cat f
"name1";"surname1";23;44
"name2";"surname2
w
ww.
so.
org/
44
3";5
6;33
"name3";"surname3";223;4554
"name4";"surname5
surname@so.net";77;889
awk '{printf "%s%s",(/^"/&&NR>1?RS:""),$0}END{print ""}' f
"name1";"surname1";23;44
"name2";"surname2 www.so.org/443";56;33
"name3";"surname3";223;4554
"name4";"surname5 surname@so.net";77;889
答案 1 :(得分:1)
这可能对您有用(GNU sed):
<?if $(var.Platform) = x64?>
<!-- Program Files 64bit folder -->
<Directory Id="ProgramFiles64Folder">
<Directory Id="INSTALLFOLDER" Name="!(loc.ProductNameFolder)" />
</Directory>
<?else?>
<!-- Program Files 32bit folder -->
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="!(loc.ProductNameFolder)" />
</Directory>
<?endif?>
</Directory>
如果当前行不包含3个或更多sed ':a;s/;/&/3;t;N;s/\n//;ta' file
,请追加下一行,删除引入的换行符并重复。