Le contenu de mon filename
fichier est le suivant (par exemple):
My block of line starts from here
START
First line
second line
third line
END
and end to here for example.
Je veux remplacer un bloc de lignes entre START
et END
par un seul mot, par exemple avec SINGLEWORD
. Comme ci-dessous:
My block of line starts from here
SINGLEWORD
and end to here for example.
Je peux trouver mon bloc de lignes en utilisant cette commande:
grep -Pzo "START(.|\n)*END" filename
Et le résultat de l'exécution de la commande ci-dessus sera comme ceci:
START
First line
second line
third line
END
Ensuite, j'ai utilisé cette commande pour combiner toutes les lignes en une seule ligne:
LAST_RESULT | sed -e :a -e '/$/N; s/\n/ /; ta'
Ensuite, j'obtiendrai ce résultat:
START First line second line third line END
Et avec ma dernière commande, LAST_RESULTS | sed 's/.*/SINGLEWORD/'
je les change en "SINGLEWORD"
et j'obtiens ce résultat.
SINGLEWORD
Maintenant, ce que je veux, c'est: Comment puis-je utiliser cette commande (ou votre commande de suggestion) et remplacer (en place) mon bloc de lignes par le mot "SINGLEWORD"? Et le résultat final sera comme ce fichier:
My block of line starts from here
SINGLEWORD
and end to here for example.
la source
sed
devrait être possible mais probablement plus difficile à lire (regardez cette question )/
,*
,?
) dans et ce ne sont que par exemple. et pourriez-vous expliquer votre commande.sed
):\/
,\*
,\?
perl -i -p0e 's/\/\*.*?\*\//SINGLEWORD/sm'
. Ça devrait marcherJe me demandais si c'est possible sans
perl
,python
et d'autres. Et j'ai trouvé cette solution en utilisantsed
:Explication:
/START.*END/
parSINGLEWORD
, / g correspondance globale (autant de fois que possible)Il a été trouvé ici .
@KasiyA, merci d'avoir appris beaucoup de choses intéressantes!
la source