Sed

在第 n 次出現逗號之前/之後添加引號

  • October 27, 2022

我有一個這種格式的文件:

a1,b1,c1,d1,e1,f1
a2,b2,c2,d2,e2,f2

我想在特定列周圍添加引號(“)(例如列 a 和列 d,列包含其他逗號,但它們的長度不同)以獲得類似:

"a1",b1,c1,"d1",e1,f1
"a2",b2,c2,"d2",e2,f2

我正在嘗試像下面這樣在多個迭代中執行以用逗號 + 引號 (,") 或引號 + 逗號 (",) 替換逗號 (,) ,具體取決於是否乞求或列結尾:

sed -E 's/(([^,]*,){1}[^,]*),/\1\,\"/g'

但這將用逗號和引號替換每個第二個逗號,而我希望每個命令只控制一個添加引號的位置。

首先,您不想要g,這意味著“全域”,替換所有出現,並且由於您需要指定一列,因此您不想全部替換。接下來,您可以sed像這樣定位第 N 次出現:第 N 次出現在s/old/new/N哪裡N。所以,引用第四個欄位,你會這樣做:

$ sed 's/[^,]*/"&"/4' file 
a1,b1,c1,"d1",e1,f1
a2,b2,c2,"d2",e2,f2

並更改第一個欄位:

$ sed 's/[^,]*/"&"/1' file 
"a1",b1,c1,d1,e1,f1
"a2",b2,c2,d2,e2,f2

&是一個特殊sed變數,表示“運算符左側匹配的任何內容s///”。

引用自:https://unix.stackexchange.com/questions/722653