Как выполнить поиск текста в файле с новой строкой / строкой разрыва - PullRequest
0 голосов
/ 20 марта 2019

Мне нужно проанализировать содержимое нескольких файлов с этим содержимым:

style=3D""><a href=3D"https://123456789.com/accounts/confirm_email/19AbCDx=
K/bWFyY29A1234529zYW50dWNjaS5ldQ/?app_redirect=3DFalse&amp;ndid=3DHMTU1Mjk=
wODY5OTA1MDk2NTptYXJjb0BtYXJjb3NhbnR1Y2NpLmV1Ojg1OQ" style=3D"color:#3b599

Мне нужно извлечь ссылку https, но моя команда grep не может игнорировать возврат новой строки и заканчивается нарезультат соединительной линии:

КОМАНДА

grep -r -m1 -oh "https://123456789.com/accounts/confirm_email*\s*[^ ]*" /folder/

РЕЗУЛЬТАТ

https://123456789.com/accounts/confirm_email/19AbCDx=

ЗАДАННЫЙ РЕЗУЛЬТАТ

https://123456789.com/accounts/confirm_email/19AbCDx=K/bWFyY29A1234529zYW50dWNjaS5ldQ/?app_redirect=3DFalse&amp;ndid=3DHMTU1MjkwODY5OTA1MDk2NTptYXJjb0BtYXJjb3NhbnR1Y2NpLmV1Ojg1OQ

PS: символ '=' не всегда (всегда) часть ссылки, но это формат файла при разрыве строки.

NB: https://123456789.com/accounts/confirm_email/ - единственная константа ссылки, повторяемая во всех файлах.

ЕСЛИ я добавляюОпция -z, опция -m1 игнорируется, и в результате получается:

https://123456789.com/accounts/confirm_email/19AbCDx=
K/bWFyY29A1234529zYW50dWNjaS5ldQ/?app_redirect=3DFalse&amp;ndid=3DHMTU1Mjk=
wODY5OTA1MDk2NTptYXJjb0BtYXJjb3NhbnR1Y2NpLmV1Ojg1OQ"https://123456789.com/accounts/confirm_email/19AbCDx=
K/bWFyY29A1234529zYW50dWNjaS5ldQ/?app_redirect=3DFalse&amp;ndid=3DHMTU1Mjk=
wODY5OTA1MDk2NTptYXJjb0BtYXJjb3NhbnR1Y2NpLmV1Ojg1OQ"https://123456789.com/accounts/confirm_email/19AbCDx=
K/bWFyY29A1234529zYW50dWNjaS5ldQ/?app_redirect=3DFalse&amp;ndid=3DHMTU1Mjk=
wODY5OTA1MDk2NTptYXJjb0BtYXJjb3NhbnR1Y2NpLmV1Ojg1OQ"

ЕСЛИ Я добавляю | head -3 после того, как команда, кажется, работает, НО http повторяется в последней строке

КОМАНДА

grep -r -oh -z "https://123456789.com/accounts/confirm_email*\s*[^ ]*" /folder/ |head-3

https://123456789.com/accounts/confirm_email/19AbCDx=
K/bWFyY29A1234529zYW50dWNjaS5ldQ/?app_redirect=3DFalse&amp;ndid=3DHMTU1Mjk=
wODY5OTA1MDk2NTptYXJjb0BtYXJjb3NhbnR1Y2NpLmV1Ojg1OQ"https://123456789.com/accounts/confirm_email/19AbCDx=

Как я могу это исключить?

1 Ответ

1 голос
/ 20 марта 2019

man grep:

-z, --null-data
       Treat  the  input  as  a set of lines, each terminated by a zero
       byte (the ASCII NUL character) instead of a newline. - -

Итак:

$ grep -z -r -m1 -oh "https://123456789.com/accounts/confirm_email*\s*[^ ]*" file

Выход:

https://123456789.com/accounts/confirm_email/19AbCDx=
K/bWFyY29A1234529zYW50dWNjaS5ldQ/?app_redirect=3DFalse&amp;ndid=3DHMTU1Mjk=
wODY5OTA1MDk2NTptYXJjb0BtYXJjb3NhbnR1Y2NpLmV1Ojg1OQ"

Новые строки все еще будут там, но вы можете удалить их с помощью tr -d \\n

...