Zeilen Ersetzen

18/10/2008 - 09:40 von Matthias Taube | Report spam
Hi,

mittels sed kann ich ja innerhalb einer Zeile von Dateien einen
Suchstring durch einen anderen ersetzen.

Ich suche aber eine Lösung, um innerhalb einer Datei alles zwischen den
Zeilen (ausschließlich)
PF_ORIG_CONFIGPF_NEW_CONFIGdurch andere Zeilen zu ersetzen.

Habt Ihr da einen Vorschlag?

mfg
Matthias
 

Lesen sie die antworten

#1 Laurianne Gardeux
19/10/2008 - 01:15 | Warnen spam
Le Sat, 18 Oct 2008 09:40:52 +0200, Matthias Taube a écrit :

mittels sed kann ich ja innerhalb einer Zeile von Dateien einen
Suchstring durch einen anderen ersetzen.

Ich suche aber eine Lösung, um innerhalb einer Datei alles zwischen den
Zeilen (ausschließlich)
PF_ORIG_CONFIG> PF_NEW_CONFIG> durch andere Zeilen zu ersetzen.



s='
'
a=$(awk '/PF_ORIG_CONFIG=/{print NR}' FILE)
b=$(awk '/PF_NEW_CONFIG=/{print NR}' FILE)
(cut -d"$s" -f"-$a" FILE; cat INSERTFILE; cut -d"$s" -f"$b-" FILE)

FILE steht für das Orginalfile und INSERTFILE für die Datei, welche die
einzusetzenden Zeilen enthàlt. Mit awk werden die Zeilennummern der
Zeilen, welche die beiden Suchbegriffe enthalten, bestimmt. Als
Feldseparator für cut ist eine newline gesetzt. Die runde Klammer in der
letzten Zeile hàlt die Ausgabe von cut, cat und nochmals cut zusammen.
Die beiden Suchstrings müssen im HAUPFILE vorkommen, dies jedoch nur je
genau einmal, sonst macht cut nicht mit.

Das gleiche nochmals als roher Entwurf eines Shellskript mit vier
Komandozeilenparametern:

***
#! /bin/sh
# zeilenersatz.sh
# 20081019 lg GPL

if [ $# -ne 4 ]; then
echo "SYNOPSIS: $0 FILE STARTSTRING ENDSTRING INSERTFILE"
exit
fi

a=$(awk '/'"$2"'/{print NR}' "$1")
b=$(awk '/'"$3"'/{print NR}' "$1")
s="
"
(cut -d"$s" -f"-$a" "$1"; cat "$4"; cut -d"$s" -f"$b-" "$1")
***

Es gibt sicher viel elegantere Lösungen, und Obiges ist nicht auf
alle möglichen Sonderfàlle getestet. Kritik willkommen.

lg

Ähnliche fragen