Esempio:
1:20 2:25 3:0.432 2:-17 10:12
Voglio sostituire tutte le stringhe che iniziano con 2: a 2:0 .
Uscita:
1:20 2:0 3:0.432 2:0 10:12
Risposta accettata:
Usando sed :
sed -E 's/((^| )2:)[^ ]*/\10/g' in > out
Inoltre, come ispirato dalla risposta di Souravc, se c'è non una possibilità di un 2: sottostringa dopo l'inizio di una stringa non contenente un 2: iniziale sottostringa (ad es. c'è non una possibilità di un 1:202:25 string, che il seguente comando abbreviato sostituirebbe in 1:202:0 ), il comando potrebbe essere abbreviato in questo:
sed -E 's/2:[^ ]*/2:0/g' in > out
Comando n. 1 / n. 2 :
-E:rendesedinterpreta il pattern come un pattern ERE (Extended Regular Expression);> out:reindirizzastdoutperout;
sed ripartizione del comando n. 1 :
s:afferma di eseguire una sostituzione/:avvia il pattern(:avvia il gruppo di acquisizione(:inizia a raggruppare le stringhe consentite^:corrisponde all'inizio della riga|:separa la seconda stringa consentita:corrisponde a uncarattere):interrompe il raggruppamento delle stringhe consentite2:corrisponde a un2carattere::corrisponde a un:carattere):interrompe il gruppo di acquisizione[^ ]*:corrisponde a qualsiasi numero di caratteri diverso da/:interrompe il pattern / avvia la stringa di sostituzione\1:backreference sostituito con il primo gruppo di acquisizione:aggiunge uncarattere/:interrompe la stringa di sostituzione / avvia i flag di patterng:afferma di eseguire la sostituzione globalmente, cioè di sostituire ogni occorrenza del pattern nella riga
sed ripartizione del comando n. 2 :
s:afferma di eseguire una sostituzione/:avvia il pattern2:corrisponde a un2carattere::corrisponde a un:carattere[^ ]*:corrisponde a qualsiasi numero di caratteri diverso da/:interrompe il pattern / avvia la stringa di sostituzione2:0:aggiunge un2:0stringa/:interrompe la stringa di sostituzione / avvia i flag di patterng:afferma di eseguire la sostituzione globalmente, cioè di sostituire ogni occorrenza del pattern nella riga