Sto provando a scrivere uno script sed che catturerà tutti gli URL "nudi" in un file di testo e li sostituiremo con <a href=[URL]>[URL]</a>
. Con "nudo" intendo un URL che non è racchiuso all'interno di un tag di ancoraggio.L'espressione regolare sed può simulare lookbehind e lookahead?
Il mio pensiero iniziale era che dovevo associare gli URL che non hanno un "o un> davanti a loro, e inoltre non hanno un < o un" dopo di loro. Tuttavia, mi imbatto in difficoltà nell'esprimere il concetto di "non avere davanti o dietro" perché, per quanto ne so, sed non ha look-ahead o look-behind.
Input Esempio:
[Beginning of File]http://foo.bar arbitrary text
http://test.com other text
<a href="http://foobar.com">http://foobar.com</a>
Nearing end of file!!! http://yahoo.com[End of File]
Esempio di output desiderato:
[Beginning of File]<a href="http://foo.bar">http://foo.bar</a> arbitrary text
<a href="http://test.com">http://test.com</a> other text
<a href="http://foo.bar">http://foo.bar</a>
Nearing end of file!!! <a href="http://yahoo.com">http://yahoo.com</a>[End of File]
osservi che la terza linea è modificato, perché è già dentro <a href>
. D'altra parte, sia la prima che la seconda riga sono state modificate. Infine, osserva che tutto il testo non URL non è modificato.
In definitiva, sto cercando di fare qualcosa di simile:
sed s/[^>"](http:\/\/[^\s]\+)/<a href="\1">\1<\/a>/g 2-7-2013
ho cominciato verificando che la seguente vi correttamente abbinare e rimuovere un URL:
sed 's/http:\/\/[^\s]\+//g'
Allora ho provato questo, ma è non è in grado di eguagliare gli URL che iniziano all'inizio del file/input:
sed 's/[^\>"]http:\/\/[^\s]\+//g'
È lì E un modo per aggirare questo problema in sed, simulando lookbehind/lookahead, o abbinando in modo esplicito l'inizio del file e la fine del file?
Perché usate '[^ \>"] '? – texasbruce
Sto cercando un URL che non è preceduta da virgolette o un segno di maggiore. – merlin2011
Non sfuggire alla'> ' – texasbruce