La commande grep -A 1 "List-Unsubscribe: <" Junk | grep -o -E "http[^>]+"
cherche les liens <http:>
dans les lignes contenant "List-Unsubscribe: <"
et les lignes juste en-dessous (-A 1
). Même si cela n'a pas été observé, cette seconde ligne pourrait théoriquement contenir un autre champ avec un lien (et pourquoi pas un champ List-Subscribe
!).
sed ?
On pourrait essayer de remplacer cette commande par une commande à base de sed
. Ou du moins pour la seconde partie de façon à conserver la capacité de grep
de parcourir récursivement les répertoires si nécessaire.
Perl-compatible regular expressions (PCREs)
Pour cherche un champ contenant un <mailto:>
suivi d'un <http:>
:
$ grep -oPz 'List-Unsubscribe: <mailto:[^>]+?>, (<http[s]?:[^>]+?>)' Junk-1
$ grep -oPz 'List-Unsubscribe: <mailto:[^>]+?>, <http[s]?:[^>]+?>' Junk-1 | tr '\000' '\n' | grep -oP '(http[s]?:[^>]+)'
$ man grep
-P Interpret PATTERNS as Perl-compatible regular expressions (PCREs). This option is experimental when combined with the -z (--null-data) option, and grep -P may warn of unimplemented features.
-z, --null-data Treat input and output data as sequences of lines, each terminated by a zero byte (the ASCII NUL character) instead of a newline.
La commande tr '\000' '\n'
remet à nouveau des retours à la ligne à la place des octets nuls.
Références :