Comment remplacer les nouvelles lignes par des tabulations?
Question
J'ai un motif comme ci-dessous
hi
hello
hallo
greetings
salutations
no more hello for you
J'essaie de remplacer toutes les nouvelles lignes par des tabulations à l'aide de la commande suivante
sed -e "s_/\n_/\t_g"
mais ça ne marche pas.
Quelqu'un pourrait-il s'il vous plaît aider? Je cherche une solution dans sed / awk.
La solution
pas sûr de la sortie que vous voulez
# awk -vRS="\n" -vORS="\t" '1' file
hi hello hallo greetings salutations no more hello for you
Autres conseils
Ici tr
est meilleur, je pense:
tr "\n" "\t" < newlines
Comme Nifle l'a suggéré dans un commentaire, newlines
est le nom du fichier contenant le texte d'origine.
Parce que sed
est tellement orienté ligne, il est plus compliqué à utiliser dans un cas comme celui-ci.
sed '$!{:a;N;s/\n/\t/;ta}' file
Vous ne pouvez pas remplacer les nouvelles lignes ligne par ligne par sed
. Vous devez accumuler des lignes et remplacer les nouvelles lignes entre elles.
text abc\n <- can't replace this one
text abc\ntext def\n <- you can replace the one after "abc" but not the one at the end
Ce script sed
accumule toutes les lignes et élimine toutes les nouvelles lignes sauf la dernière:
sed -n '1{x;d};${H;x;s/\n/\t/g;p};{H}'
Au fait, votre script sed
sed -e "s _ / \ n _ / \ t_g"
essaie de dire "remplacez toutes les barres obliques suivies de nouvelles lignes par des barres obliques suivies d'onglets ". Les caractères de soulignement jouent le rôle de délimiteurs pour la commande s
afin que les barres obliques puissent être utilisées plus facilement comme caractères de recherche et de remplacement.
paste -s
-s Concaténer toutes les lignes de chaque fichier d'entrée séparé dans commande en ligne de commande. Le caractère de nouvelle ligne de chaque ligne sauf la dernière ligne de chaque fichier d'entrée est remplacé par le caractère de tabulation, sauf indication contraire de l'option -d.
Vous y êtes presque avec votre script sed, il vous suffira de le changer en:
sed -e "s/\n/\t/g"
Le \
est suffisant pour échapper, vous n'avez pas besoin d'ajouter _
Et vous devez ajouter /
avant g
à la fin pour que sed sache qu'il s'agit de la dernière partie du script.