Мне нужно проанализировать содержимое нескольких файлов с этим содержимым:
style=3D""><a href=3D"https://123456789.com/accounts/confirm_email/19AbCDx= K/bWFyY29A1234529zYW50dWNjaS5ldQ/?app_redirect=3DFalse&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&ndid=3DHMTU1MjkwODY5OTA1MDk2NTptYXJjb0BtYXJjb3NhbnR1Y2NpLmV1Ojg1OQ
PS: символ '=' не всегда (всегда) часть ссылки, но это формат файла при разрыве строки.
NB: https://123456789.com/accounts/confirm_email/ - единственная константа ссылки, повторяемая во всех файлах.
https://123456789.com/accounts/confirm_email/
ЕСЛИ я добавляюОпция -z, опция -m1 игнорируется, и в результате получается:
https://123456789.com/accounts/confirm_email/19AbCDx= K/bWFyY29A1234529zYW50dWNjaS5ldQ/?app_redirect=3DFalse&ndid=3DHMTU1Mjk= wODY5OTA1MDk2NTptYXJjb0BtYXJjb3NhbnR1Y2NpLmV1Ojg1OQ"https://123456789.com/accounts/confirm_email/19AbCDx= K/bWFyY29A1234529zYW50dWNjaS5ldQ/?app_redirect=3DFalse&ndid=3DHMTU1Mjk= wODY5OTA1MDk2NTptYXJjb0BtYXJjb3NhbnR1Y2NpLmV1Ojg1OQ"https://123456789.com/accounts/confirm_email/19AbCDx= K/bWFyY29A1234529zYW50dWNjaS5ldQ/?app_redirect=3DFalse&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&ndid=3DHMTU1Mjk= wODY5OTA1MDk2NTptYXJjb0BtYXJjb3NhbnR1Y2NpLmV1Ojg1OQ"https://123456789.com/accounts/confirm_email/19AbCDx=
Как я могу это исключить?
man grep:
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&ndid=3DHMTU1Mjk= wODY5OTA1MDk2NTptYXJjb0BtYXJjb3NhbnR1Y2NpLmV1Ojg1OQ"
Новые строки все еще будут там, но вы можете удалить их с помощью tr -d \\n
tr -d \\n