2016-07-24 16 views
-1

Ich frage mich nur, ob es eine praktische Möglichkeit gibt, die Variable für das angepasste Muster in einem Perl-Liner zu ändern. Zum Beispiel in der Zeichenfolge abcdef würde Ich mag def mit e (Ausgabe abce) zu ersetzen, mit einem Befehl wie folgt aussehen:So ändern Sie das übereinstimmende Muster

echo "abcdef" | perl -pne 's/(def)/{command that trims first and last character of $1 and returns it as a string for perl to use it as a replacement}/' 

Es wäre leicht, eine solche Funktionalität zu verwenden, um verschiedene Formatierungsaufgaben auszuführen. Können wir das in sed tun?

+1

Warum sind Sie fragen nach sed, wenn Ihre ganze Problembeschreibung über Perl ist? – melpomene

Antwort

1

Das ist einfach in Perl mit der /e Flagge:

echo 'abcdef' | perl -pe 's/(def)/substr $1, 1, -1/e' 

e Perl erzählt den Ersatzteil als einen Block von Code zu analysieren, kein String. Sie können dort beliebigen Code einfügen.

Aber Ihre konkrete Aufgabe (die erste und letzte Zeichen Trimmen) kann auch wie folgt erfolgen:

echo 'abcdef' | perl -pe 's/d(e)f/$1/' 

(.. Auch perl -p bereits impliziert -n müssen nicht beides angeben)

Verwandte Themen