$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"'
Джон также поддерживает суть [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]
\S[1121484][1121485], который соответствует любым [1121486] символам, не содержащим пробелов[1121487] в регулярных выражениях (PCRE), [1121488]-P[1121489] активирует PCRE для [1121490]grep[1121491], а [1121492]-o[1121493] заставляет выводить только соответствующий сегмент строки.[1121052]].
Просто egrep -o 'https?: // [^ ")] +'
, который будет включать url ()
и "http"
Я бы выбрал цепочку, но немного по-другому. Если у вас есть фрагмент текста, подобный вашему, в текстовом файле с именем 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-файлов или текстовых фрагментов со ссылками.
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