Der Inhalt meiner filename
Datei ist wie folgt (zum Beispiel):
My block of line starts from here
START
First line
second line
third line
END
and end to here for example.
Ich möchte einen Zeilenblock zwischen START
und END
durch nur ein einziges Wort ersetzen , zum Beispiel durch SINGLEWORD
. Wie unten:
My block of line starts from here
SINGLEWORD
and end to here for example.
Mit diesem Befehl kann ich meinen Zeilenblock finden:
grep -Pzo "START(.|\n)*END" filename
Das Ergebnis der Ausführung des obigen Befehls lautet wie folgt:
START
First line
second line
third line
END
Dann habe ich diesen Befehl verwendet, um alle Zeilen in einer einzigen Zeile zu kombinieren:
LAST_RESULT | sed -e :a -e '/$/N; s/\n/ /; ta'
Dann bekomme ich folgendes Ergebnis:
START First line second line third line END
Und mit meinem letzten Befehl LAST_RESULTS | sed 's/.*/SINGLEWORD/'
ändere ich sie in "SINGLEWORD"
und erhalte dieses Ergebnis.
SINGLEWORD
Was ich jetzt möchte, ist: Wie kann ich diesen Befehl (oder Ihren Vorschlagsbefehl) verwenden und meinen Zeilenblock (an Ort und Stelle) durch das Wort "SINGLEWORD" ersetzen? Und das Endergebnis wird wie folgt aussehen:
My block of line starts from here
SINGLEWORD
and end to here for example.
quelle
sed
sollte möglich sein, aber wahrscheinlich schwerer zu lesen ( siehe diese Frage )/
,*
,?
) darin , und diese sind nur Beispiel. und könnten Sie Ihren Befehl erklären.sed
):\/
,\*
,\?
perl -i -p0e 's/\/\*.*?\*\//SINGLEWORD/sm'
. Es sollte funktionierenIch frage mich , ob dies möglich ist , ohne
perl
,python
und andere. Und ich fand diese Lösung mitsed
:Erläuterung:
/START.*END/
durchSINGLEWORD
, / g globales Spiel (so oft wie möglich)Es wurde hier gefunden .
@ KasiyA, danke, ich habe viele interessante Dinge gelernt!
quelle