2016-06-20 17 views
0

ich sed zu verwenden versuchen sed-Befehl am Ende jeder Zeile in einer Datei einfügen mit -Verwenden sed anderen sed Befehl in einer Datei einzufügen

sed -r 's/$/ | sed -r s\/abc\/xyz\/ /' filename.extension

Was ich will, neben haben ist einfache Anführungszeichen um das innere sed. So dass es etwas aussehen wie-

sed -r 's/$/ | sed -r 's\/abc\/xyz\/' /' filename.extension

ich die innere Apostrophe versucht zu entkommen, aber keinen Gebrauch.

Grundsätzlich möchte ich die folgenden Zeilen -

line 1 line 2 line 3

drehen in-

line 1 | sed -r 's/abc/xyz/' line 2 | sed -r 's/abc/xyz/' line 3 | sed -r 's/abc/xyz/'

Ich bin nicht in der Lage, die einzelnen Angebote zu erhalten, auch mit den Escape-Zeichen.

Antwort

2
sed -e "s:$: | sed -r 's/abc/xyz/':" yourfile 

Ihr Problem ist ein Beispiel für den allgemeinen Fall der Verschachtelung von Shell-Ausdrücken. Es gibt eine Reihe von Möglichkeiten, dies zu tun.

  1. Verwenden Sie alternative Trennzeichen. Das habe ich hier gemacht.
  2. Weisen Sie Teilausdrücke Variablen zu und erweitern Sie sie dann.
  3. Verwenden Sie viele \ Escapezeichen.
  4. Setzen Sie Ihren Teilausdruck in eine Datei und read es.
+0

Ich ersetze nicht abc mit xyz. Es hat eine andere Regex innerhalb des zweiten sed-Befehls, daher die Anführungszeichen. –

+1

Aha, nun, ich bin froh, dass du dein Beispiel auf etwas Minimales reduziert hast, und du hast auch ein Beispiel für das gewünschte Verhalten angegeben. Das ist der richtige Weg, Fragen zu stellen. – DigitalRoss

2

Verwenden alternative Trennzeichen in inneren sed und doppelte Anführungszeichen in Außen sed Ihren Befehl zu vereinfachen:

sed "s/$/ | sed -r 's~abc~xyz~'/" file.ext 

btw ist -r nicht wirklich nötig in inneren sed

+0

Was ist der Unterschied zwischen Single-Quote und Double-Quote in Bezug auf bash? –

+0

Sie können einzelnes Anführungszeichen nicht in ein anderes einzelnes Anführungszeichen in der Shell verschachteln. – anubhava

+0

@Aditya: Hat dies für Sie funktioniert? – anubhava

0

Dies könnte für Sie arbeiten (GNU SED):

sed 's/$/ | sed -r '\''s\/abc\/xyz\/'\''/' file 

'\'' verwenden des aktuellen Apostroph, dann in der Schale 01 Endanwendungum ein einfaches Zitat und schließlich ein einfaches Zitat zu zitieren, um das Zitat des sed-Befehls zu starten. Verwenden Sie \/, um den Schrägstrich im Befehl sed zu zitieren.

Da der Substitutionsbefehl jeden delimiter verwenden:

sed 's#$# | sed -r '\''s/abc/xyz/'\''#' file 

reduziert die Menge der Quotierung und:

sed "s#$# | sed -r 's/abc/xyz/'#" file 

reduziert es weiter. Jedoch können doppelte quoting sed-Befehle (oder irgendein Dienstprogramm) unerwünschte Nebenwirkungen haben, d. H. Metazeichen können von der Shell ausgewertet werden, so dass es am besten ist, einen einfachen Anführungsstrich zu verwenden und mit dem "lochartigen" Mechanismus '\'' zu leben.