Как я могу извлекать/анализировать полный URL из полу случайной строки?

$TERM должен сказать приложения, с каким терминалом они говорят так, они знают, как говорить с ним.

Измените его на значение, поддерживаемое удаленным хостом, и это соответствует максимально тесно Вашему терминалу (screen).

Большинство систем Linux должно, по крайней мере, иметь a screen запись terminfo. В противном случае screen реализует надмножество vt100 и vt100 универсально. Так:

TERM=screen ssh host

или

TERM=vt100 ssh host

При необходимости в 256 цветной поддержке Вы могли бы попробовать xterm-256color который должен быть достаточно близким (screen поддержки 256 цветов тот же путь xterm делает), и скажите приложениям, что Ваше терминальное приложение поддерживает 256 цветов, и скажите им, как использовать их.

Или можно установить terminfo запись на удаленном хосте.

infocmp -x | ssh -t root@remote-host '
  cat > "$TERM.info" && tic -x "$TERM.info"'
9
04.03.2014, 08:25
6 ответов
[1120020] Попробовали:[12228] вместо этого?[12229] Обратите внимание, что все, что имеет класс символов, воспринимается как буквальное, поэтому слова [1120513][\w][1120514] не совпадают с символом слова [1120515][1120516]. Более того, нет необходимости избегать регрессивного метахарафа внутри символьного класса, т.е. говорить [1120517][\.][1120518] не совсем то же самое, что [1120519][...][1120520].[1120025].
21
27.01.2020, 20:04
[1120961]URI не очень подходят для сравнения регулярных выражений, когда они встроены в естественный язык. Тем не менее, текущее состояние техники - это [1121395] Джона Грубера [1121396] Улучшенная либеральная, точная регрессионная модель для сопоставления URL[1121396]. В настоящее время однострочная версия выглядит следующим образом:

Джон также поддерживает суть [1121397]здесь[1121398], хотя его запись в блоге гораздо лучше объясняет его тестовый корпус и ограничения шаблона регулярных выражений.

if [ -f `brew --prefix`/etc/bash_completion.d/git-completion.bash ]; then
. `brew --prefix`/etc/bash_completion.d/git-completion.bash
fi

Если вы хотите реализовать выражение из командной строки, вы можете обнаружить, что вы ограничены механизмом регулярных выражений, который вы используете, или проблемами цитирования оболочки. Я нашел скрипт Ruby лучшим вариантом, но ваш пробег может варьироваться.[1120966]

5
27.01.2020, 20:04
[1121047] Проблема с совпадающими URL заключается в том, что примерно [1121468] все [1121469] может быть в URL:

Как вы видите, (действительный) URL выше содержит [1121470]$[1121471],[1121472]? [1121473],[1121474]#[1121475],[1121476]&[1121477],[1121478],[1121479],[1121480].[1121481] and [1121482]:[1121483]. В принципе, единственное, в чем вы можете быть уверены, что URL-адрес не содержит пустого места. Помня об этом, вы можете извлекать URL, используя такой простой шаблон, как:

\S[1121484][1121485], который соответствует любым [1121486] символам, не содержащим пробелов[1121487] в регулярных выражениях (PCRE), [1121488]-P[1121489] активирует PCRE для [1121490]grep[1121491], а [1121492]-o[1121493] заставляет выводить только соответствующий сегмент строки.[1121052]].

2
27.01.2020, 20:04

Просто egrep -o 'https?: // [^ ")] +'

, который будет включать url () и "http"

-1
27.01.2020, 20:04

Я бы выбрал цепочку, но немного по-другому. Если у вас есть фрагмент текста, подобный вашему, в текстовом файле с именем strings.txt, вы можете сделать следующее:

grep http ./strings.txt | sed 's/http/\nhttp/g' | grep ^http | sed 's/\(^http[^ <]*\)\(.*\)/\1/g' | grep IWANTthis | sort -u

Объяснение:

grep http ./st3.txt      => will catch lines with http from text file
sed 's/http/\nhttp/g'    => will insert newline before each http
grep ^http               => will take only lines starting with http
sed 's/\(^http[^ <]*\)\(.*\)/\1/g'   
                         => will preserve string from ^http until first space or < (the latter in hope if 
grep IWANTthis           => will take only urls containing your text of your interest; you can omit this.
sort -u                  => will sort the list and remove duplicates from it 

Поскольку существует вероятность, что URL-адрес может не работать, вы можете выполнить дополнительную проверку ошибок с помощью своего URL-адреса интерес. например wget -p URL -O / dev / null - он будет печатать совершенно разные коды ошибок в случае, если URL недоступен, поэтому вы можете настроить цикл для обработки вашего списка ссылок и вывода статуса их действительности. .

Если вы в конечном итоге извлекаете ссылки из файлов html, то в особых случаях могут возникнуть проблемы с sed . Как было предложено в забавном (сообщении) , которое вы, вероятно, уже видели, возможно, лучше использовать не регулярные выражения, а движок парсера HTML. Одним из таких легко доступных парсеров является текстовый браузер lynx (доступен на любом Linux). Это позволяет вам мгновенно выгрузить список всех ссылок в файле, а затем просто извлечь нужные URL-адреса с помощью grep.

lynx -dump -listonly myhtmlfile.html | grep IWANTthisString | sort -u

Однако это не будет работать с большинством искаженных html-файлов или текстовых фрагментов со ссылками.

0
27.01.2020, 20:04
cat text-file.txt | grep -Eo '(https?|ftp|file)://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]'

или добавьте команду SED, чтобы сохранить ее в файл CSV:

| sed 's/;/<tab>/g' > file.csv
-1
27.01.2020, 20:04

Теги

Похожие вопросы