wie Sie sagen, " sed "Punkt neue Zeile"
Ich kann nicht herausfinden, wie zu sagen, sed Punkt neue Zeile:
echo -e "one\ntwo\nthree" | sed 's/one.*two/one/m'
Ich bekommen:
eines
drei
stattdessen bekomme ich original:
eines
zwei
drei
Du musst angemeldet sein, um einen Kommentar abzugeben.
sed
ist line-basiertes tool. Ich glaube nicht, dass diese eine option.Sie können
h/H
(hold)g/G
(bekommen).Vielleicht sollten Sie versuchen
vim
vim
(ich bin neuer Linux-user) AFAIK operator m/M wird verwendet, um zu sagensed
wechseln auf multiline-Modushold-space
, dannget
es, und machen die substitution.Können Sie die Verwendung von python so:
Dieser liest den gesamten python ' s standard-Eingabe (
sys.stdin.read()
), ersetzt dann "ein" für "zu ersetzen.*zwei" mit dot matches all setting aktiviert (mit(?s)
am Anfang des regulären Ausdrucks) und dann druckt die geänderte Zeichenfolge (das nachgestellte Komma in drucken verwendet wird, um zu verhindern, drucken hinzufügen einen zusätzlichen Zeilenumbruch).Könnte dies für Sie arbeiten:
oder
oder
oder
Sed
hat Spiel alle Zeichen (einschließlich der\n
) mit einem Punkt.
aber in der Regel hat er bereits abgestreift, die\n
ab, die als Teil des Zyklus, so dass es nicht mehr vorhanden sind in dem Muster-Raum zusammengebracht werden.Nur bestimmte Befehle (
N
,H
undG
) erhalten Zeilenumbrüche in das Muster/den Frachtraum.N
hängt ein newline an den pattern space und dann hängt die nächste Zeile.H
macht genau das gleiche, außer es wirkt auf den Raum.G
hängt ein newline an den pattern space und dann hängt alles, was in den Frachtraum zu.Der Raum ist leer, bis Sie etwas in es so:
fügen Sie eine leere Zeile nach jeder Zeile.
fügt 2 Leerzeilen etc etc.
Wie wäre es mit zwei sed-Aufrufe:
(loszuwerden, die 'zwei' zuerst, dann loszuwerden, die leere Zeile)
Tatsächlich, ich bevorzuge Perl one-liners über Python:
Unter Diskussion basiert auf Gnu-sed.
sed arbeitet auf einer line-by-line-Art und Weise. Es ist also nicht möglich zu sagen, es dot match newline. Es gibt jedoch einige tricks, diese auch umzusetzen. Sie können eine Schleife verwenden, die Struktur (Art), um alle den text im pattern space, und führen Sie dann die operation.
Alles in den pattern space, Verwendung:
Machen "dot-match-newline" indirekt, verwenden Sie:
Also das Ergebnis ist:
Beachten Sie, dass in diesem Fall
(\n|.)
entspricht, newline und alle Charaktere. Siehe unten Beispiel: