簡體   English   中英

在Bash中將vim replace轉換為sed / awk

[英]Convert vim replace to sed / awk in Bash

我想添加一個; 在數據末尾的每個負值之前,如下所示:

29.01.2019;29.01.2019;KIND;NAME;ITEM;ITEMNUMBER;ITEMORDER;;;;;;;;;;20,00;VAL
29.01.2019;29.01.2019;KIND;NAME;ITEM;ITEMNUMBER;ITEMORDER;012345678;012345678901;FW02ZZZ46847351235;;;;;;;-1,13;;VAL

我在vim試用版:

:%s/-\d\{0,5}\,\d\{0,2}/;&\1/g

不幸的是,我不能用sed來稱呼它:

sed -E 's/-\d\{0,5}\,\d\{0,2}/;&\1/g'

我收到錯誤消息:

sed: 1: "s/-\d\{0,5}\,\d\{0,2}/; ...": \1 not defined in the RE

如何轉換此格式,以便可以從命令行/使用sed進行調用?

謝謝!

您可以使用

sed -E 's/-\d{0,5}(,\d{1,2})?/;&/g'

細節

  • -連字符
  • \\d{0,5} -0到5位數字- (,\\d{1,2})? -匹配1個或0個事件的可選捕獲組
    • , -逗號
    • \\d{1,2} -1或2位數字。

替換模式中的&代表整個匹配值。

參見在線sed演示

s="29.01.2019;29.01.2019;KIND;NAME;ITEM;ITEMNUMBER;ITEMORDER;;;;;;;;;;20,00;VAL
29.01.2019;29.01.2019;KIND;NAME;ITEM;ITEMNUMBER;ITEMORDER;012345678;012345678901;FW02ZZZ46847351235;;;;;;;-1,13;;VAL"
sed -E 's/-\d{0,5}(,\d{1,2})?/;&/g' <<< "$s"

輸出:

29.01.2019;29.01.2019;KIND;NAME;ITEM;ITEMNUMBER;ITEMORDER;;;;;;;;;;20,00;VAL
29.01.2019;29.01.2019;KIND;NAME;ITEM;ITEMNUMBER;ITEMORDER;012345678;012345678901;FW02ZZZ46847351235;;;;;;;;-1,13;;VAL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM