Tato otázka zde již obsahuje odpovědi :sed:smazat všechny výskyty řetězce kromě prvního
(4 odpovědi)
Uzavřeno před 2 lety.
Linux
(4 odpovědi)
Uzavřeno před 2 lety.
Mám soubor obsahující řádky:
india;austria;japan;chile
china;US;nigeria;mexico;russia
Chci nahradit všechny výskyty středníku na každém řádku např. ;NEW;
, ale pouze od 2. výskytu. Výsledek by měl vypadat takto:
india;austria;NEW;japan;NEW;chile
china;US;NEW;nigeria;NEW;mexico;NEW;russia
Zkoušel jsem to s gsub, ale nahradí všechny výskyty:awk '/;/{gsub(/;/,";NEW;") }{print}'
Přijatá odpověď:
awk
řešení je mnohem delší, ale je snazší jej vytvořit obecně:
awk -F; '{for(i=1;i<NF;i++)printf"%s;%s",$i,(i>=2)?"NEW;":"";print$NF}' replacefile
Je možné to udělat pomocí sed
také vytvořením smyčky s t
příkaz a vždy nahraďte 2. (nebo kterýkoli chcete) oddělovač nějakou dočasnou značkou (obvykle n
):
sed ':b;s/;/n/2;tb;s/n/;NEW;/g' replacefile