如何应用这个命令我在vim中使用sed或awk?
:%s/\v\n(\D)/ \1/g
:%
:完整缓冲区s/
:替换\v
:使用正则表达式魔法......我坦率地说仍然不明白这个\n
:匹配新行(\D)
:匹配'不是数字'。被括号括起来将其标记为群组/ \1/g
:将匹配替换为空格和组1 /g
:确认替换所有出现的情况INPUT
Datum Transaktion Branche/Partner Verrechnet Belastung Gutschrift Bonuspunkte
24.12.2017 "Zinsen*
Zinsperiode: vom 24.11. bis 24.12.
Zins auf EUR 23'001'011.43 vom 20.12.-20.12. EUR 121.31
Zins auf EUR 23'002'045.73 vom 21.12.-23.12. EUR 173.99
Zins auf EUR 23'006'067.38 vom 24.12.-24.12. EUR 191.33" Ja 239.42 0.0
23.12.2017 "Acme Ent.
Lebensmittelgeschäft
" Lebensmittelgeschäft Ja 121.65 121.7
20.12.2017 "Restaurant Lorem ipsum
Restaurant
" Restaurant Ja 15.00 15.0
输出
Datum Transaktion Branche/Partner Verrechnet Belastung Gutschrift Bonuspunkte
24.12.2017 "Zinsen* Zinsperiode: vom 24.11. bis 24.12. Zins auf EUR 23'001'011.43 vom 20.12.-20.12. EUR 121.31 Zins auf EUR 23'002'045.73 vom 21.12.-23.12. EUR 173.99 Zins auf EUR 23'006'067.38 vom 24.12.-24.12. EUR 191.33" Ja 239.42 0.0
23.12.2017 "Acme Ent. Lebensmittelgeschäft " Lebensmittelgeschäft Ja 121.65 121.7
20.12.2017 "Restaurant Lorem ipsum Restaurant " Restaurant Ja 15.00 15.0
答案 0 :(得分:2)
Awk
等价物如下所示:
awk '{ printf "%s%s", (NR==1? "" : (/^[0-9]/? ORS : OFS)), $0 }END{ print "" }' file
OFS
- 输出字段分隔符(默认为空格字符)ORS
- 输出记录分隔符输出:
Datum Transaktion Branche/Partner Verrechnet Belastung Gutschrift Bonuspunkte
24.12.2017 "Zinsen* Zinsperiode: vom 24.11. bis 24.12. Zins auf EUR 23'001'011.43 vom 20.12.-20.12. EUR 121.31 Zins auf EUR 23'002'045.73 vom 21.12.-23.12. EUR 173.99 Zins auf EUR 23'006'067.38 vom 24.12.-24.12. EUR 191.33" Ja 239.42 0.0
23.12.2017 "Acme Ent. Lebensmittelgeschäft " Lebensmittelgeschäft Ja 121.65 121.7
20.12.2017 "Restaurant Lorem ipsum Restaurant " Restaurant Ja 15.00 15.0
答案 1 :(得分:0)
sed
,perl
解决方案:
<强> perl的强>
tr -d '\v\n\r' < input.txt | perl -pe 's/(\d{2}\.\d{2}\.\d{4})/\n\1/g'
<强> SED 强>
tr -d '\v\n\r' < input.txt | sed 's/\([0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{4\}\)/\n\1/g'
<强>输出:强>
Datum Transaktion Branche/Partner Verrechnet Belastung Gutschrift Bonuspunkte
24.12.2017 "Zinsen* Zinsperiode: vom 24.11. bis 24.12. Zins auf EUR 23'001'011.43 vom 20.12.-20.12. EUR 121.31 Zins auf EUR 23'002'045.73 vom 21.12.-23.12. EUR 173.99 Zins auf EUR 23'006'067.38 vom 24.12.-24.12. EUR 191.33" Ja 239.42 0.0
23.12.2017 "Acme Ent. Lebensmittelgeschäft " Lebensmittelgeschäft Ja 121.65 121.7
20.12.2017 "Restaurant Lorem ipsum Restaurant " Restaurant Ja 15.00 15.0
<强>说明:强>
tr
命令会删除所有\v
,\n
和\r
字符,然后sed
命令会在每个日期之前添加新行元素来创建CSV结构。
答案 2 :(得分:0)
或者只在批处理模式下使用vim :)慢大约8倍,但这是一个选择。
echo '%s/blah/BLAH/ | w'|vi -e file.cfg