Mettre un texte spécifique à la fin du fichier dans unix

J’ai un fichier HTML récupéré en utilisant wget . Je souhaite mettre tous les liens, c’est-à-dire tous les à la fin du fichier. C’est possible?

Par exemple, considérez le fichier suivant:

  Line1
2013.05.23 Line2
link
Line3

Je voudrais changer le texte en ceci:

  Line1
2013.05.23 Line2

Line3 link

Si vous voulez juste copier (et ne pas déplacer ) les liens à la fin du fichier, vous pouvez faire un simple grep (peut-être que cela ne fonctionne pas pour des cas particuliers bien sûr):

 grep -o -P '()' test.html > tmp.html && cat tmp.html >> test.html 

Pour la balise d’ancrage simple dans l’exemple de données, ce script Perl suffit:

 #!/usr/bin/env perl use ssortingct; use warnings; my @urls = (); while (<>) { chomp; if (m/\s*(]+>.*<\/a>)\s*/) { push @urls, $1; s///; } print "$_\n"; } foreach my $url (@urls) { print "$url\n"; } 

Exemple de sortie:

  Line1
2013.05.23 Line2

Line3 link

Notez que s’il y avait plusieurs balises d’ancrage sur une seule ligne dans l’entrée, cela inclura également le matériau entre les balises externes au bas du script. Si une balise d’ancrage est brisée sur plusieurs lignes, elle sera ignorée. J’ai peu de doute qu’il existe des notations HTML qui peuvent briser ce script (mais je ne suis pas sûr de ce qu’elles sont).

Ceci est une étape mineure par rapport au script simple:

 #!/usr/bin/env perl use ssortingct; use warnings; my @urls = (); while (<>) { chomp; while (m/\s*(]+>.*?<\/a>)\s*/) { push @urls, $1; s// /; } print "$_\n"; } foreach my $url (@urls) { print "$url\n"; } 

La boucle while à la place du it itère sur les correspondances dans une ligne. Le non gourmand .*? quantifier signifie qu’il ne gobe pas les balises d’ancrage intermédiaires. Le substitut remplace le matériau enlevé par un blanc, conservant ainsi les mots séparant les étiquettes d’ancrage.

Exemple de données:

  Line1
2013.05.23 Line2
link
Line3 Line1
2013.05.23 Line2
link extraneous material link other notes link
Line3

Exemple de sortie:

  Line1
2013.05.23 Line2

Line3 Line1
2013.05.23 Line2
extraneous material other notes
Line3 link link link link

Vous obtenez de juger si cela est suffisant pour vos fins. Au moins, cela vous donne quelque chose sur lequel travailler.