2013-10-31 15 views
5

Voglio eliminare le righe da un file che corrisponde a determinate stringhe. Queste stringhe contengono barre, ad esempio "/". Il mio problema è che sebbene sia possibile modificare il delimitatore con sed per la sostituzione, non è possibile farlo con l'opzione di eliminazione.modifica eliminazione sed del delimitatore

I.e. questo non funziona a causa della barra in $ x:

sed --in-place "/$x/d" total-list.csv 

dove $ x è per esempio "http://someurl.com/uri". Ma non riesci a cambiare il delimitatore quando usi l'opzione d (ho bisogno che sia ~ per esempio, invece di /).

Qualcuno può aiutare in questo?

Grazie Paul

+0

Nota che '-i' è una scorciatoia di' --in-place' – jkshah

+0

Grazie! Risparmierà sicuramente ... – pokero

+0

Possibile duplicato di [Usa le barre in sed sostituisci] (http://stackoverflow.com/questions/5864146/use-slashes-in-sed-replace) – tripleee

risposta

9

Si può dire:

sed --in-place "\~$x~d" total-list.csv 

Citando dal manual:

\% regexp%

(Il % possono essere sostituiti da qualsiasi altro carattere singolo.)

Ciò corrisponde anche all'espressione regolare espressione regolare, ma consente di utilizzare un delimitatore diverso da /. Ciò è particolarmente utile se il regexp contiene molte barre, poiché evita il noioso scappamento di di ogni /. Se regexp stesso include qualsiasi delimitatore caratteri, ognuno deve essere preceduto da una barra rovesciata (\).

+0

Grazie mille, che sembra funziona perfettamente Tutto ciò che è nel mio file viene eliminato, ma penso che sia a causa degli spazi nel file $ x che verrà eseguito di nuovo e controllato. Non posso contrassegnarlo come risposta, farò una volta che posso. – pokero

Problemi correlati