如何将我在 vim 中使用的这个命令应用到 sed 或 awk?
:%s/\v\n(\D)/\1/g
解释
:%
: 完成缓冲区s/
:替换\v
:使用正则表达式魔法...坦率地说,我仍然不明白这一点\n
:匹配新行(\D)
:匹配“不是数字”。用大括号括起来以将其标记为组/\1/g
:用空格和第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
输出
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
最佳答案
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
关于regex - 如何将 vim 正则表达式替换命令转换为 sed 或 awk?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49347292/