sostituisci il testo lungo con caratteri speciali con sed


0

Sto usando sed in unix per sostituire del testo con caratteri speciali in un file. Lo google e trovo il seguente comando

sed 's/from/to/g' file.txt

qui "da" è il testo originale da sostituire, "a" è il testo da sostituire

Sto cercando di applicare questo a un file con testo lungo con caratteri speciali, ovvero sostituendo "/D/dec/prog/g++.exe -Wall --std = c ++ 0x" (senza virgolette) a "SYSTEM_PATH / BIN" , Provo quanto segue, ma non funziona

sed 's//D/dec/prog/g++.exe   -Wall --std=c++0x/SYSTEM_PATH/BIN/g' file.txt

ma viene fuori l'errore "sed: -e espressione n. 1, carattere 10: opzione sconosciuta a" s ".

Sono un principiante di Unix ma per qualche motivo ho bisogno di accedere in remoto a un server Unix per gestire alcuni file. voglio sapere

1) come posso definire da e stringa a una variabile, qualcosa come FROMSTR = '/D/dec/prog/g++.exe -Wall --std = c ++ 0x' TOSTR = 'SYSTEM_PATH / BIN'

così posso chiamare sed come s / $ FROMSTR / $ TO / g 'file.txt di sed

ma sembra che il sed non sappia come interpretarlo come variabile

2) dopo aver sostituito il testo con sed, non riscrive il risultato nel file originale. Come farlo funzionare?

Risposte:


0

Il comando sostitutivo non deve essere utilizzato /come delimitatore.

sed 's!/D/dec/prog/g++.exe   -Wall --std=c++0x!SYSTEM_PATH/BIN!g' file.txt

grazie, ma non esacpe il '/' nella stringa di sostituzione. Continuo a provare e trovo che dovrei scrivere '/' come '\ /' ma è abbastanza scomodo se la stringa di sostituzione è lunga e devo sostituire anticipatamente '/' in '\ /'. Esiste un parametro che posso impostare in modo da consentire a sed di uscire '/' automaticamente? Ma il modo in cui, nell'esempio sopra non riscrive il testo risultante nel file.txt, come posso farlo funzionare? Grazie
user1285419
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.