Debian
替換每行中第 n 個出現的字元串
使用 sed,如何將給定文件的每一行上第 N 個字元替換為最後一個字元?
在這種情況下,我想將第三個替換為最後
;
一個,
輸入
1;2;3;4;5;6;7;8;9 10;20;30;40;50;60;70;80;90 100;200;300;400;500;600;700;800;900
預期產出
1;2;3;4;5;6,7;8;9 10;20;30;40;50;60,70;80;90 100;200;300;400;500;600,700;800;900
我知道我可以像這樣替換第 6 次出現
sed 's/;/,/6' input_file.csv > output_file.csv
或者最後一個
sed -r 's/(.*);/\1,/' input_file.csv > output_file.csv
但在我的特殊情況下,由於一些細微差別,我需要從頭開始。
我試過類似的東西
sed -r 's/(.*);/\1,/3' input_file.csv > output_file.csv
您可以顯式擷取另外兩個分隔欄位:
$ sed -r 's/(.*);([^;]*;[^;]*;)/\1,\2/' input_file.csv 1;2;3;4;5;6,7;8;9 10;20;30;40;50;60,70;80;90 100;200;300;400;500;600,700;800;900
或更以程式方式
$ sed -r 's/(.*);(([^;]*;){2})/\1,\2/' input_file.csv 1;2;3;4;5;6,7;8;9 10;20;30;40;50;60,70;80;90 100;200;300;400;500;600,700;800;900
其中量詞中的數字
{n-1}
替換倒數第 n 個。
您可以簡單地反轉線條,更改第 N 次出現,然後重新反轉:
rev file | sed 's/;/,/3' | rev