sed для удаления URL из файла - PullRequest
10 голосов
/ 26 ноября 2010

Я пытаюсь написать выражение sed, которое может удалить URL из файла

пример

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

Но я не понимаю:

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

ИСПРАВЛЕНО !!!!!

обрабатывает почти все случаи, даже некорректные URL

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

Ответы [ 2 ]

10 голосов
/ 26 ноября 2010

Следующее удаляет http:// или https:// и все до следующего пробела:

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

Редактировать:

Я должен иметьиспользуемый:

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

"[s]\?" - гораздо более читаемый способ написания "необязательного s" по сравнению с "\(s\)\{0,1\}"

"\S*" aболее читаемая версия «любых непробельных символов», чем «[^[:space:]]*»

Я должен был использовать sed, который был установлен на моем Mac во время написания этого ответа (brew install gnu-sed FTW).


Существуют улучшенные регулярные выражения URL (например, те, которые учитывают схемы, отличные от HTTP (S)), но это сработает для вас, учитывая приведенные вами примеры.Зачем все усложнять?

0 голосов
/ 14 декабря 2017

Принятый ответ обеспечивает подход, который я использовал для удаления URL и т. Д. Из моих файлов.Однако он оставил «пустые» строки.Вот решение.

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

Флаги GNU sed, используемые выражения:

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

Однако

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

оставляет непечатаемый символ (ы),предположительно \n (переводы строк).Стандартные sed подходы на основе удаления "пустых" строк, вкладок и пробелов, например,

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

не работают, здесь: если вы не используете "метку ветки" для обработки новых строк, вы не можетезамените их, используя sed (который читает входные данные по одной строке за раз).

Решение состоит в том, чтобы использовать следующее выражение perl:

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

, которое использует подстановку оболочки,

  • '`echo "\012"`'

для замены восьмеричного значения

  • \012

(т. Е. Перевод строки, \n), что происходит 2 или более раз,

  • {2,}

(иначе мы бы развернули все строки) с чем-то другим;здесь:

  • //

то есть, ничего.

[Вторая ссылка ниже предоставляет замечательную таблицу этих значений!]

Используются флаги perl:

-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

Ссылки:


Пример:

$ cat url_test_input.txt

Some text ...
/3790913/sed-dlya-udaleniya-url-iz-faila
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.

$ 
...