1 votes

Parsing des continuations de ligne

Quelle est la façon la plus simple d'analyser les caractères de continuation de ligne ? Cela semble être une action tellement basique que je suis surpris qu'il n'y ait pas de commande de base pour le faire. Les boucles 'while read' et 'while read -r' ne font pas ce que je veux, et la solution la plus simple que j'ai trouvée est la solution sed ci-dessous. Existe-t-il un moyen de faire cela avec quelque chose de basique comme tr ?

$ cat input
Output should be \\
one line with a '\\' character.
$ while read l; do echo $l; done < input
Output should be one line with a '' character.
$ while read -r l; do echo $l; done < input
Output should be \\
one line with a '\\' character.
$ sed '/\\\\$/{N; s/\\\\\\n//;}' input
Output should be one line with a '\\' character.
$ perl -0777 -pe 's/\\\\\\n//s' input
Output should be one line with a '\\' character.

1voto

pilcrow Points 20628

Si par "le plus simple" Si vous voulez dire concis et lisible, je suggère votre perl-isme avec une petite modification :

$ perl -pe 's/\\\n//' /tmp/line-cont

Pas besoin de la mémoire éventuellement intensive ... -0777 ... (mode "slurp" pour tout le fichier).

Si, toutefois, par "le plus simple" vous voulez dire pas la coquille de départ, ceci suffira :

$ { while read -r LINE; do
    printf "%s" "${LINE%\\}";    # strip line-continuation, if any
    test "${LINE##*\\}" && echo; # emit newline for non-continued lines
    done; } < /tmp/input

(Je préfère _printf "%s" $USER_INPUT a echo $USER_INPUT_ parce que echo ne peuvent pas être portés à arrêter de chercher des commutateurs, et printf est généralement un élément intégré de toute façon).

Il suffit de placer cela dans une fonction définie par l'utilisateur et de ne plus jamais être révolté par cela. Attention : cette dernière approche ajoutera une nouvelle ligne de queue à un fichier qui n'en a pas.

0voto

OverMachoGrande Points 3892

La méthode des regex semble être la meilleure solution.

0voto

Imagist Points 5348

Je choisirais la solution Perl simplement parce qu'elle sera probablement la plus extensible si vous souhaitez ajouter des fonctionnalités par la suite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X