2010-11-26 8 views
9

Je suis en train d'écrire une expression sed qui peut supprimer urls d'un fichiersed pour supprimer des URL d'un fichier

exemple

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 :) 

Mais je ne l'obtenir:

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

FIXE !!!!!

gère presque tous les cas, même les URL malformées

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

Lorsque vous travaillez avec urls, fichier chemins, etc, je préfère utiliser "|" comme séparateur sed donc je ne dois pas échapper /. Exemple: sed 's/chemin/vers/un/fichier/|/newpath/vers/nouveau/fichier/| g' –

+0

@ JP19, comme ça, essayerait cela – daydreamer

Répondre

9

Le suivant supprime http:// ou https:// et tout jusqu'à l'espace suivant:

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 :) 

Edit:

je aurais dû utiliser:

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

« [s]\? » est une façon beaucoup plus lisible de l'écriture « une option s » par rapport à « \(s\)\{0,1\} »

« \S* » une version plus lisible « tout non caractères espace "que" [^[:space:]]* "

Je dois avoir utilisé le sed qui est venu installé avec mon Mac au moment où j'ai écrit cette réponse (brew install gnu-sed FTW).


Il y a de meilleures expressions régulières URL là-bas (ceux qui prennent en compte les systèmes autres que HTTP (S), par exemple), mais cela fonctionne pour vous, étant donné les exemples que vous donnez. Pourquoi compliquer les choses?

+1

Johnsyweb pourriez-vous s'il vous plaît expliquer votre expression Sed? Particulièrement la notation {0,1}. – minerals

+1

@minerals: J'ai mis à jour ma réponse et j'espère que cela aidera. – Johnsyweb

+0

très apprécié! – minerals

0

La réponse acceptée fournit l'approche que j'ai utilisée pour supprimer des URL, etc. de mes fichiers. Cependant, il a laissé des lignes "vides". Voici une solution.

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 

Les drapeaux GNU sed, les expressions utilisées sont:

-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:]]* 

Cependant,

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

laisse le caractère non imprimable (s), vraisemblablement \n (sauts de ligne). Approches basées sur la norme sed pour éliminer les lignes, les onglets et les espaces "vides", par ex.

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

ne fonctionnent pas, ici: si vous n'utilisez pas une « étiquette de branche » pour traiter les nouvelles lignes, vous ne pouvez pas les remplacer en utilisant sed (qui lit l'entrée d'une ligne à la fois).

La solution est d'utiliser l'expression perl suivante:

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

qui utilise une substitution de la coque,

  • '`echo "\012"`'

pour remplacer une valeur octal

  • \012

(c.-à-un saut de ligne, \n), qui se produit 2 fois ou plus,

  • {2,}

(sinon nous déballer toutes les lignes), avec autre chose; ici:

  • //

dire, rien.

[La deuxième référence ci-dessous fournit une table merveilleuse de ces valeurs!]

Les drapeaux perl utilisés sont:

-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 

Références:


Exemple:

$ 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. 

$ 
Questions connexes