Y a-t-il un problème avec sed et le caractère de nouvelle ligne ?
J'ai un fichier test.txt avec le contenu suivant
aaaaa
bbbbb
ccccc
ddddd
Ce qui suit ne fonctionne pas :sed -r -i 's/n/,/g' test.txt
Je sais que je peux utiliser tr
pour cela, mais ma question est pourquoi cela ne semble pas possible avec sed.
S'il s'agit d'un effet secondaire du traitement du fichier ligne par ligne, je serais intéressé de savoir pourquoi cela se produit. Je pense que grep
supprime les nouvelles lignes. Est-ce que sed fait la même chose ?
Réponse acceptée :
Avec GNU sed
et fourni POSIXLY_CORRECT
n'est pas dans l'environnement (pour une entrée sur une seule ligne) :
sed -i ':a;N;$!ba;s/n/,/g' test.txt
De https://stackoverflow.com/questions/1251999/sed-how-can-i-replace-a-newline-n :
- créer une étiquette via
:a
- ajoutez la ligne actuelle et la ligne suivante à l'espace de modèle via
N
- si nous sommes avant la dernière ligne, branchez-vous sur le libellé créé
$!ba
($!
signifie ne pas le faire sur la dernière ligne (car il devrait y avoir une dernière nouvelle ligne)). - Enfin, la substitution remplace chaque retour à la ligne par une virgule sur l'espace du modèle (qui est le fichier entier).