Analyser les continuations de ligne

Quel est le moyen le plus simple d’parsingr les caractères de continuation de ligne? Cela semble être une action si simple que je suis surpris qu’il n’y ait pas de commande de base pour le faire. ‘while read’ et ‘while read -r’ boucles ne font pas ce que je veux, et la solution la plus simple que j’ai trouvée est la solution sed ci-dessous. Y a-t-il un moyen de faire cela avec quelque chose de base comme tr?

 $ cat input
 La sortie devrait être \
 une ligne avec un caractère '\'.
 $ while read l;  faire écho à $ l;  fait <entrée
 La sortie doit être une ligne avec un caractère ''.
 $ while read -rl;  faire écho à $ l;  fait <entrée
 La sortie devrait être \
 une ligne avec un caractère '\'.
 $ sed '/ \\ $ / {N;  s / \\\ n //;} 'entrée
 La sortie doit être une ligne avec un caractère '\'.
 $ perl -0777 -pe 's / \\\ n // s' entrée
 La sortie doit être une ligne avec un caractère '\'.

Si par “plus simple” vous voulez dire concis et lisible, je suggérerais votre perl-ism avec une petite modification:

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

Pas besoin du commutateur éventuellement gourmand en mémoire ... -0777 ... (mode slurp en fichier entier).

Si, toutefois, vous entendez par “plus simple”, pas le shell sortant, cela suffira:

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

(Je préfère printf "%s" $USER_INPUT à echo $USER_INPUT car echo ne peut pas être appelé à arrêter de chercher les commutateurs, et printf est généralement intégré de toute façon.)

Il suffit de la replacer dans une fonction définie par l'utilisateur et de ne plus jamais la révoquer. Attention: cette dernière approche appenda une nouvelle ligne à un fichier qui en manque.

La regex ressemble à la voie à suivre.

Je voudrais aller avec la solution Perl simplement parce que ce sera probablement le plus extensible si vous voulez append plus de fonctionnalités plus tard.