2009-06-01 3 views

risposta

9

Io di solito codificare fino a uno di linea per questo:

perl -i -pe 's/some/thing/' log.file 

Vedi Here

+0

Ma perché non posso usare le retrocedenze? Come perl -pi -e "s/foo (. *) Bar/bar $ 1foo /" tezt2 non funziona .. –

+2

Probabilmente la shell sta corrompendo la stringa. Prova a sostituire i tuoi "" con "in modo che * non venga espanso. –

+0

Grazie per averlo fatto! –

8

Questo spesso è fatto con una battuta:

perl -pi.bak -e "s/find/replace/g" <file> 

nota la porzione -i.bak - questo crea un file di backup con l'estensione .bak. Se si vuole giocare senza rete si può fare questo per sovrascrivere il file esistente senza un backup:

perl -pi -e "s/find/replace/g" <file> 
1

oppure è possibile utilizzare sed (lo so ... hai chiesto di perl):

sed -i 's/find/replace/g' <file> 
+0

Il modo in cui sed gestisce le regole di espressione regolare sono ... diverse, a dir poco, di Perl. – GJTorikian