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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top