sed bearbeitet Zeichenfolge zwischen bestimmten Absätzen in einer Datei

sed bearbeitet Zeichenfolge zwischen bestimmten Absätzen in einer Datei

Ich habe eine Datei namens a.txt. Und sie enthält den folgenden Inhalt. Es ist nicht bekannt, wie viele Zeilen zwischen den einzelnen Funktionen liegen.

function a(
line 1;
line 2;
line ...;
properties pro = "test";
)

function b(
line 1;
line 2;
line ...;
properties pro= "test";
)

function c(
properties pro= "test";
)

Ich möchte bearbeiten

function b(
line 1;
line 2;
line ...;
properties pro= "test";
)

Zu dem Folgendem

function b(
line 1;
line 2;
line ...;
properties pro= "replace";
)

Ist es möglich, einzeilige Befehle wie sed oder awk zu verwenden?

Antwort1

Vorausgesetzt, Ihre Funktionen sind wie gezeigt durch eine oder mehrere Leerzeilen in Absätze unterteilt, können Sie awk mit einem leeren Datensatztrennzeichen verwenden. Insbesondere mit GNU awk:

$ gawk '
    BEGIN{RS=""} 
    /^function b/ {sub(/properties pro= "test"/,"properties pro= \"replace\"")}
    {printf "%s%s", $0, RT}
' a.txt
function a(
line 1;
line 2;
line ...;
properties pro = "test";
)

function b(
line 1;
line 2;
line ...;
properties pro= "replace";
)

function c(
properties pro= "test";
)

Sie können auch nicht-GNU-awk verwenden, müssen dann aber einen festen Ausgabedatensatztrenner festlegen, ORSda der RTTrenner GNU-spezifisch ist.

Perl stellt über die Option einen ähnlichen Absatzmodus bereit -00.

Mit sed können Sie einen Adressbereich mit regulären Ausdrücken verwenden, um den Umfang der Ersetzung einzuschränken, z. B.

$ sed '/^function b/,/^)$/s/properties pro= "test"/properties pro= "replace"/' a.txt
function a(
line 1;
line 2;
line ...;
properties pro = "test";
)

function b(
line 1;
line 2;
line ...;
properties pro= "replace";
)

function c(
properties pro= "test";
)

Bedenken Sie jedoch, dass Dinge, die in Ihrer "Sprache" syntaktisch neutral sein können (wie z. B. LeerzeileninnerhalbEine Funktion) kann diesen Ansatz unterbrechen – aus diesem Grund sind reguläre Ausdrücke für solche Aufgaben oft keine gute Wahl.

verwandte Informationen