Обычно программа запускается с аргументами? Возможно, когда вы запускаете его в gdb, вы не предоставляете те же аргументы, которые используются для запуска процесса, к которому вы присоединяетесь вручную.
Вы можете определить любые аргументы, которые запущен запущенный экземпляр, с помощью следующей команды:
ps aux | grep [process_name]
Аргументы будут перечислены в выводе, например:
auser 1114 2.8 6.8 316652 139928 ? SLl Aug07 3:24 /usr/local/bin/a_program arg1 arg2 arg3
Вы можете установить аргументы в gdb, используя set args:
(gdb) set args arg1 arg2 arg3
Только с sed
по желанию:
sed -n '/cdn1/p' "$YOUR_FILE"| sed 's/^.*\(https.*dmg\).*/\1/g'
Или короче:
sed -n 's/^.*\(https.*dmg\).*/\1/p' "$YOUR_FILE"
sed -n 's/^.*\(https.*\.[a-z]\{2,3\}\).*/\1/p' "$YOUR_FILE"
sed -n 's/^.*\(https\?.*cdn1.*\.[a-z]\{2,3\}\).*/\1/p' "$YOUR_FILE"
sed
и подобные им НЕ подходят для обработки данных XML/HTML.
Используйте соответствующие синтаксические анализаторы XML/HTML, напримерxmllint
илиxmlstarlet
.
Сxmllint
вы бы сделали:
xmllint --html --xpath 'string(//a[text()="click here"]/@href)' input.html
Выход:
https://cdn1.evernote.com/mac-smd/public/Evernote_RELEASE_7.1_456448.dmg
string(//a[text()="click here"]/@href)
-ключевое выражение xpath для выбора a
тега, текстовое значение которого равно click here
, и получения строкового представления его href
атрибута