2017-05-22 67 views
1

我在查找sed選項時遇到問題,以便在字符串匹配後替換字符的後兩個出現。基本上,在這些CSV文件中,我試圖替換jobcd匹配後的前2個直接管道|個字符,因爲它應該是一個字段。使用sed替換後面兩次出現的管道字符

我能夠運行這個,我才意識到這個更換每一個|字符... sed -i 's/|/%/g' data.csv

下面是來自這些CSV文件樣本行:

-1|7149636|2015-02-14 00:42:23|20150214|4223||Delete Future Batch||jobcd: %PAL| Cnt:60|||1900-01-01 00:00:00|0|||0||||0|0|0|.000 

我試圖讓該行看起來像:

-1|7149636|2015-02-14 00:42:23|20150214|4223||Delete Future Batch||jobcd: %PAL% Cnt:60%||1900-01-01 00:00:00|0|||0||||0|0|0|.000 

編輯:的%相反,我試圖用取代所以我試圖讓輸出看起來像:

-1|7149636|2015-02-14 00:42:23|20150214|4223||Delete Future Batch||jobcd: %PAL\| Cnt:60\|||1900-01-01 00:00:00|0|||0||||0|0|0|.000 

回答

0

您可以使用:

s='-1|7149636|2015-02-14 00:42:23|20150214|4223||Delete Future Batch||jobcd: %PAL| Cnt:60|||1900-01-01 00:00:00|0|||0||||0|0|0|.000' 

sed -E 's/(\|jobcd)([^|]*)\|([^|]*)\|/\1\2\\|\3\\|/g' <<< "$s" 
-1|7149636|2015-02-14 00:42:23|20150214|4223||Delete Future Batch||jobcd: %PAL\| Cnt:60\|||1900-01-01 00:00:00|0|||0||||0|0|0|.000 
+0

謝謝,我才意識到,我應該使用'\替換字符串|'的',而不是%'。我嘗試過'sed -i -E'/(\ | jobcd)([^ |] *)\ |([^ |] *)\ |/\ 1 \ 2 \ | \ 3 \ |/g'那沒用。什麼纔是正確的語法? – simplycoding

+0

你需要通過使用'sed -E's /(\ | jobcd)([^ |] *)\ |([^ |] *)\ |/\ 1 \ 2 \\ | \ 3 \\ |/g'<<<「$ s」' – anubhava

+0

這是否工作正常? – anubhava