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