Frage

Ich habe Muster wie unten

hi
hello
hallo
greetings
salutations
no more hello for you

Ich versuche, alle Newlines durch die Registerkarte mit dem folgenden Befehl zu ersetzen

sed -e "s_/\n_/\t_g"

Aber es funktioniert nicht.

Könnte jemand bitte helfen? Ich suche eine Lösung in SED/awk.

War es hilfreich?

Lösung

Ich bin mir nicht sicher über die gewünschte Ausgabe, die Sie möchten

# awk -vRS="\n" -vORS="\t" '1' file
hi      hello   hallo   greetings       salutations     no more hello for you 

Andere Tipps

Hier tr ist besser, denke ich:

tr "\n" "\t" < newlines 

Wie Nifle in einem Kommentar vorgeschlagen hat, newlines Hier ist der Name der Datei, die den Originaltext enthält.

Da sed ist so zeilenorientiert, dass es in einem Fall wie diesem komplizierter ist.

sed '$!{:a;N;s/\n/\t/;ta}' file

Sie können Newlines nicht linienzeitig ersetzen durch sed. Sie müssen Linien sammeln und die Neulinge ersetzen zwischen Sie.

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

Dies sed Das Skript akkumuliert alle Zeilen und eliminiert alle Neuheiten, aber die letzten:

sed -n '1{x;d};${H;x;s/\n/\t/g;p};{H}'

Übrigens deine sed Skript sed -e "s_/\n_/\t_g" versucht zu sagen: "Ersetzen Sie alle Schrägstriche, gefolgt von Newlines mit Schrägstrichen, gefolgt von Registerkarten". Die Unterstriche übernehmen die Rolle von Grenzwerten für die s Befehl, damit Schrägstriche einfacher als Zeichen zum Suchen und Ersetzen verwendet werden können.

paste -s

-s verkettet alle Zeilen jeder separaten Eingabedatei in Befehlszeilenreihenfolge. Das Newline -Zeichen jeder Zeile mit Ausnahme der letzten Zeile in jeder Eingabedatei wird durch das Registerkartenzeichen ersetzt, sofern von der Option -d nicht anders angegeben.

Sie sind fast mit Ihrem SED -Skript da, Sie müssten es nur ändern, an:

sed -e "s/\n/\t/g"

Das \ ist genug für die Flucht, Sie müssen nicht hinzufügen _Und Sie müssen die hinzufügen / Vor g Am Ende zu lassen, dass SED weiß, dass dies der letzte Teil des Drehbuchs ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top