Sed
在第 n 次出現逗號之前/之後添加引號
我有一個這種格式的文件:
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///
”。