2010-11-26 12 views
9

Estoy tratando de escribir una expresión sed que puede eliminar las direcciones URL de un archivosed para eliminar las URL de un archivo

ejemplo

http://samgovephotography.blogspot.com/ updated my blog just a little bit ago. Take a chance to check out my latest work. Hope all is well:) 

Meet Former Child Star & Author Melissa Gilbert 6/15/09 at LA's B&N https://hollywoodmomblog.com/?p=2442 Thx to HMB Contributor @kdpartak :) 

Pero yo no lo consigue:

sed 's/[\w \W \s]*http[s]*:\/\/\([\w \W]\)\+[\w \W \s]*/ /g' posFile 

¡¡¡FIJO !!!!!

maneja casi todos los casos, incluso las direcciones URL mal formados

sed 's/[\w \W \s]*http[s]*[a-zA-Z0-9 : \. \/ ; % " \W]*/ /g' positiveTweets | grep "http" | more 
+2

Cuando se trabaja con urls, archivo caminos, etc., prefiero usar "|" como separador de sed, así que no tengo que escapar /. Ejemplo: sed's/path/to/some/file/|/newpath/to/new/file/| g ' –

+0

@ JP19, me gusta, probaría esto – daydreamer

Respuesta

9

El siguiente quita http:// o https:// y todo hasta el siguiente espacio:

sed -e 's!http\(s\)\{0,1\}://[^[:space:]]*!!g' posFile 
updated my blog just a little bit ago. Take a chance to check out my latest work. Hope all is well:) 

Meet Former Child Star & Author Melissa Gilbert 6/15/09 at LA's B&N Thx to HMB Contributor @kdpartak :) 

Editar:

yo, hubiera utilizado:

sed -e 's!http[s]\?://\S*!!g' posFile 

"[s]\?" es una forma mucho más legible de la escritura "opcional s" en comparación con "\(s\)\{0,1\}"

"\S*" una versión más fácil de "no cualquier caracteres de espacio "que" [^[:space:]]* "

Debo haber estado usando el sed que vino instalado con mi Mac en el momento en que escribí esta respuesta (brew install gnu-sed FTW).


hay expresiones regulares URL mejor por ahí (las que tienen en cuenta los esquemas distintos de HTTP (S), por ejemplo), pero esto va a funcionar para usted, teniendo en cuenta los ejemplos que das. ¿Por qué complicar las cosas?

+1

Johnsyweb ¿podría explicar su expresión sed? Particularmente la notación {0,1}. – minerals

+1

@minerals: He actualizado mi respuesta y espero que ayude. – Johnsyweb

+0

muy apreciado! – minerals

0

La respuesta aceptada proporciona el enfoque que utilicé para eliminar URLs, etc. de mis archivos. Sin embargo, dejó líneas "en blanco". Aquí hay una solución.

sed -i -e 's/http[s]\?:\/\/\S*//g ; s/www\.\S*//g ; s/ftp:\S*//g' input_file 

perl -i -pe 's/^'`echo "\012"`'${2,}//g' input_file 

Las banderas de GNU sed, las expresiones utilizadas son:

-i Edit in-place 
-e [-e script] --expression=script : basically, add the commands in script 
     (expression) to the set of commands to be run while processing the input 
^ Match start of line 
$ Match end of line 


? Match one or more of preceding regular expression 
{2,} Match 2 or more of preceding regular expression 
\S* Any non-space character; alternative to: [^[:space:]]* 

Sin embargo,

sed -i -e 's/http[s]\?:\/\/\S*//g ; s/www\.\S*//g ; s/ftp:\S*//g' 

deja carácter no imprimible (s), presumiblemente \n (saltos de línea). Enfoques basados ​​en sed estándar para eliminar líneas, pestañas y espacios "en blanco", p.

sed -i 's/^[ \t]*//; s/[ \t]*$//' 

no funcionan, aquí: si no se utiliza una "etiqueta rama" para procesar los saltos de línea, no se puede reemplazarlos usando sed (que lee la entrada de una línea a la vez).

La solución es utilizar la siguiente expresión Perl:

perl -i -pe 's/^'`echo "\012"`'${2,}//g' 

que utiliza una sustitución cáscara,

  • '`echo "\012"`'

para reemplazar un valor octal

  • \012

(es decir, una nueva línea, \n), que se produce 2 o más veces,

  • {2,}

(de lo contrario habría desenvolver todas las líneas), con algo más; aquí:

  • //

es decir, nada.

[La segunda referencia a continuación proporciona una maravillosa mesa de estos valores!]

Las banderas de Perl se utiliza son:

-p Places a printing loop around your command, 
    so that it acts on each line of standard input 

-i Edit in-place 

-e Allows you to provide the program as an argument, 
    rather than in a file 

Referencias:


Ejemplo:

$ cat url_test_input.txt 

Some text ... 
https://stackoverflow.com/questions/4283344/sed-to-remove-urls-from-a-file 
https://www.google.ca/search?dcr=0&ei=QCsyWtbYF43YjwPpzKyQAQ&q=python+remove++citations&oq=python+remove++citations&gs_l=psy-ab.3...1806.1806.0.2004.1.1.0.0.0.0.61.61.1.1.0....0...1c.1.64.psy-ab..0.0.0....0.-cxpNc6youY 
http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html 
https://bbengfort.github.io/tutorials/2016/05/19/text-classification-nltk-sckit-learn.html 
http://datasynce.org/2017/05/sentiment-analysis-on-python-through-textblob/ 
https://www.google.ca/?q=halifax&gws_rd=cr&dcr=0&ei=j7UyWuGKM47SjwOq-ojgCw 
http://www.google.ca/?q=halifax&gws_rd=cr&dcr=0&ei=j7UyWuGKM47SjwOq-ojgCw 
www.google.ca/?q=halifax&gws_rd=cr&dcr=0&ei=j7UyWuGKM47SjwOq-ojgCw 
ftp://ftp.ncbi.nlm.nih.gov/ 
ftp://ftp.ncbi.nlm.nih.gov/1000genomes/ftp/alignment_indices/20100804.alignment.index 
Some more text. 

$ sed -e 's/http[s]\?:\/\/\S*//g ; s/www\.\S*//g ; s/ftp:\S*//g' url_test_input.txt > a 

$ cat a 

Some text ... 










Some more text. 

$ perl -i -pe 's/^'`echo "\012"`'${2,}//g' a 

Some text ... 
Some more text. 

$ 
Cuestiones relacionadas