我擁有可變數目的下劃線的行。我需要從行尾開始替換第三個下劃線。有沒有sed
,awk
或任何其他oneliner選項?從末尾開始的每行代替第n個字符串
實施例:
>ABC_BBB_VVV_BBB_NNN
>ABC_BBB_FFF_VVV_BBB_NNN
應該變成
>ABC_BBB=VVV_BBB_NNN
>ABC_BBB_FFF=VVV_BBB_NNN
我擁有可變數目的下劃線的行。我需要從行尾開始替換第三個下劃線。有沒有sed
,awk
或任何其他oneliner選項?從末尾開始的每行代替第n個字符串
實施例:
>ABC_BBB_VVV_BBB_NNN
>ABC_BBB_FFF_VVV_BBB_NNN
應該變成
>ABC_BBB=VVV_BBB_NNN
>ABC_BBB_FFF=VVV_BBB_NNN
這看起來爲從端部的第三_
並用=
替換它:
$ sed -E 's/_([^_]*_[^_]*_[^_]*)$/=\1/' input
ABC_BBB=VVV_BBB_NNN
ABC_BBB_FFF=VVV_BBB_NNN
這可以是稍微縮寫爲:
sed -E 's/_([^_]*(_[^_]*){2})$/=\1/' input
以上是針對n=3
。對於其他n
,只需將2
替換爲n-1
即可。
謝謝,它的工作。 – fibar
假設你希望能夠到該溶液中適應2或4或任何其它數量的從任一端,並使用GNU AWK爲gensub()下劃線的:
$ awk -F_ '{$0=gensub(FS,"=",NF-3)}1' file
ABC_BBB=VVV_BBB_NNN
ABC_BBB_FFF=VVV_BBB_NNN
$ awk -F_ '{$0=gensub(FS,"=",NF-2)}1' file
ABC_BBB_VVV=BBB_NNN
ABC_BBB_FFF_VVV=BBB_NNN
$ awk -F_ '{$0=gensub(FS,"=",NF-4)}1' file
ABC=BBB_VVV_BBB_NNN
ABC_BBB=FFF_VVV_BBB_NNN
這給出了每條具有少於預期下劃線的行的不合格結果(警告消息),例如,爲每個空白行。也許有'NF> n'條件的防守? –
許多可能性來處理,如果任何,如果它可能發生,但由於OP不顯示它在他們的示例輸入/輸出...... –
或者AWK:
awk -F_ '{for(i=1;i<NF;++i)printf("%s%c",$i,i==NF-3?"=":"_");printf("%s\n",$NF)}'
謝謝,它也工作。 – fibar
awk '{sub(/_VVV/,"=VVV")}1' file
>ABC_BBB=VVV_BBB_NNN
>ABC_BBB_FFF=VVV_BBB_NNN
看到https://stackoverflow.com/help/someone-answers –