Come sfuggire a una singola virgoletta in un'espressione sed che è già circondata da virgolette?Come sfuggire alla citazione singola in sed?
Ad esempio:
sed 's/ones/one's/' <<< 'ones thing'
Come sfuggire a una singola virgoletta in un'espressione sed che è già circondata da virgolette?Come sfuggire alla citazione singola in sed?
Ad esempio:
sed 's/ones/one's/' <<< 'ones thing'
Citazione sed
codici con virgolette doppie:
$ sed "s/ones/one's/"<<<"ones thing"
one's thing
non mi piace sfuggire codici con centinaia di backslash - mi fa male agli occhi Di solito faccio in questo modo:
$ sed 's/ones/one\x27s/'<<<"ones thing"
one's thing
Un trucco è quello di utilizzare coperture della stringa di concatenazione di stringhe adiacenti e la fuga la citazione incorporato utilizzando shell fuga:
sed 's/ones/two'\''s/' <<< 'ones thing'
two's thing
ci sono 3 stringhe nell'espressione sed, che quindi la shell ricuce insieme:
sed 's/ones/two'
\'
's/'
Speranza che aiuta a qualcun altro!
Il modo migliore è quello di utilizzare $'some string with \' quotes \''
ad esempio:
sed $'s/ones/two\'s/' <<< 'ones thing'
Il '$ 'stringa'' in stile C è specifico di Bash, quindi non è portabile alla shell POSIX. – tripleee
So che si tratta di andare a suonare come un poliziotto fuori, ma non avrei mai potuto ottenere di lavoro sed quando c'erano le virgolette singole e doppie nella stringa. Per aiutare i neofiti come me che hanno problemi, una possibilità è dividere la stringa. Ho dovuto sostituire il codice in oltre 100 file index.hmtl. Le stringhe avevano virgolette singole e doppie, quindi ho diviso la stringa e sostituito il primo blocco con <!--
e il secondo blocco con -->
. Ha fatto un casino dei miei file index.html ma ha funzionato.
Basta usare doppie virgolette sull'esterno del comando sed.
$ sed "s/ones/one's/" <<< 'ones thing'
one's thing
Funziona anche con i file.
$ echo 'ones thing' > testfile
$ sed -i "s/ones/one's/" testfile
$ cat testfile
one's thing
Se si dispone di singole e virgolette all'interno della stringa, va bene lo stesso. Basta sfuggire le virgolette.
Ad esempio, questo file contiene una stringa con virgolette singole e doppie. Userò sed per aggiungere una virgoletta e rimuovere alcune virgolette.
$ cat testfile
"it's more than ones thing"
$ sed -i "s/\"it's more than ones thing\"/it's more than one's thing/" testfile
$ cat testfile
it's more than one's thing
possibile duplicato del [Sfuggire-apici all'interno delle stringhe racchiuse tra virgolette singole] (http://stackoverflow.com/questions/1250079/escaping-single-quotes-within-single-quoted-strings) – buff
Il corto la risposta è "[non puoi farlo] (http://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes)" - i workaround presentati tutti funzionano bene. –