簡體   English   中英

bash腳本中的條件字符串替換

[英]Conditional string substitution in a bash script

我對bash腳本非常陌生,並且嘗試對大型CSV文件中的數據進行大量更新。

文件結構為:

date|id|id|000000|string_type|0|0|0.00|0|0|0|0|0|0|string_subtype.

更改的是string_subtype,有時是string_type。

當我僅使用以下方式更改string_subtype值時:

sed -i 's/string_subtype_old/string_subtype_new/g' $file

沒有問題。

問題是當我同時更改單個行的string_type和sub_type時,sub_type更改為具有相同string_type的所有記錄

date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeA
date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeA
date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeB
date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeB
date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeC
date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeC

date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeD
date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeD
date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeE
date|id|id|000000|typeA|0|0|0.00|0|0|0|0|0|0|subtypeE
date|id|id|000000|typeB|0|0|0.00|0|0|0|0|0|0|subtypeF
date|id|id|000000|typeB|0|0|0.00|0|0|0|0|0|0|subtypeF

我嘗試過

sed -e 's/string_type_old/string_type_new/g' -e 's/string_subtype_old/string_subtype_new/g' $file

但是所有string_type_old都改變了!

有什么建議么?

- 編輯 -

真實的例子:

2014-01-01|000fc55|297633835|122350|WHOME|0|0|0.00|2|0|0|0|0|0|WHOME_CLEAN
2014-01-01|000fc56|297633835|122377|WHOME|0|0|0.00|2|0|0|0|0|0|WHOME_STORA
2014-01-01|000fc57|297633835|122378|WHOME|0|0|0.00|2|0|0|0|0|0|WHOME_OTHER
2014-01-01|000fc58|297633835|122428|WHOME|0|0|0.00|2|0|0|0|0|0|WHOME_KGADG
2014-01-01|000fc59|297633835|120776|WHOME|1|0|0.00|0|0|0|0|0|0|WFOOD_GOURT

2014-01-01|000fc55|297633835|122350|WHOME|0|0|0.00|2|0|0|0|0|0|W_CLEAN
2014-01-01|000fc56|297633835|122377|WHOME|0|0|0.00|2|0|0|0|0|0|W_STORA
2014-01-01|000fc57|297633835|122378|WHOME|0|0|0.00|2|0|0|0|0|0|W_OTHER
2014-01-01|000fc58|297633835|122428|WGADG|0|0|0.00|2|0|0|0|0|0|W_KGADG
2014-01-01|000fc59|297633835|120776|WFOOD|1|0|0.00|0|0|0|0|0|0|W_GOURT

原料1至3很簡單

sed -i's / WHOME_CLEAN / W_CLEAN / g'$ file

sed -i's / WHOME_STORA / W_STORA / g'$ file

sed -i's / WHOME_OTHER / W_OTHER / g'$ file

在Raw 4和Raw 5中,我需要在WGADG或WFOOD中更改主類型WHOME。

sed -e's / WHOME / WGADG / g'-e's / WHOME_KGADG / W_KGADG / g'$ file

WHOME的所有原始數據都已更改! 我需要一些命令來過濾grep,僅過濾type == WHOME && subtype == WGADG的raws

您只能指定一次更改子類型,如下所示:

sed '0,/string_subtype_old/s/string_subtype_old/string_subtype_new/'

暫無
暫無

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

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