Je suis novice dans l'utilisation de sed mais j'ai expérimenté sed s/..../..../
(substitut) pour modifier une phrase complète si elle est sur une seule ligne mais je ne connais pas de solution alternative sur la façon de modifier une phrase qui peut avoir été séparée sur deux lignes telles que:
Cette:
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
est en fait écrit comme ceci:
Lorem Ipsum is simply dummy text of the
printing and typesetting industry.
Comment pouvez-vous détecter cela ou le coder pour remplacer la phrase entière même si elle est sur deux lignes au lieu d'une?
command-line
sed
DᴀʀᴛʜVᴀᴅᴇʀ
la source
la source
Réponses:
La commande suivante fonctionnera dans les deux situations:
Plus d'explications: Comment puis-je utiliser sed pour remplacer une chaîne multi-lignes?
la source
sed
, rien de plus. Telle est la question du titre. Le titre est pasperl
.Lorem
est sur la dernière ligne, un défaut qu'il partage avec votre version.)Bien que sed peut correspondre à motifs sur plusieurs lignes ( en utilisant les commandes
N
ouH
pour ajouter des lignes successives correspondant avant), ceci est bien en dehors de sa zone de confort. Tentative que si vous aimez la douleur.Perl peut faire ce genre de choses bien. Utilisez le
-p
bouton pour le faire traiter un enregistrement d'entrée standard à la fois et imprimer l'enregistrement modifié (à la Sed), et-000
pour activer le mode paragraphe (où les enregistrements sont séparés par des lignes vides). Dans une expression régulière,\s
correspond à tout caractère des espaces dont une nouvelle ligne.Si vous voulez mettre un saut de ligne dans le texte de remplacement lorsque l'original contient un, qui est plus compliqué. Comment faire cela dépend de vos besoins à l'endroit où placer la nouvelle ligne.
la source
sed
. Il est également étiqueté avecsed
, pas avecperl
.sed ne peut pas facilement lire sur plusieurs lignes. Utilisez
perl -i -0pe 's/.../.../...'
plutôt.la source
perl
est plus simple pour vous, cela ne signifie pas que cela ensed
vaut rarement la peine.