Ich weiß, wie man eine Datei mit sed Schritt für Schritt bearbeitet, aber wie erstelle ich ein echtes sed-Skript und verwende es dann auf der Datei, um dieselben Dinge zu tun, die die einzelnen sed-Befehle tun würden? Zum Beispiel diese 3 sed-Befehle:
sed -i '4i\ ' baconDatei
sed -i 's/,/\t\t/' baconDatei
sed -i 's/,/ /' baconDatei
Antwort1
Befehle in eine Datei einfügen
Fügen Sie diese Zeilen in eine Skriptdatei mit dem Namen ein script.sed
.
4i\
s/,/\t\t/
s/,/ /
Führen Sie es dann wie folgt aus:
$ sed -i -f script.sed baconFile
Erstellen eines eigenständigen Sed-Skripts
wenn Sie eine einzelne ausführbare Datei wünschen, gehen Sie wie folgt vor:
#/bin/bash
sed -i '
4i\
s/,/\t\t/
s/,/ /
' "$@"
Fügen Sie die obigen Zeilen in eine Datei namens ein script.bash
, machen Sie sie ausführbar ( chmod +x script.bash
und führen Sie sie wie folgt aus:
$ script.bash baconFile
Erstellen der Skriptdatei
Mit dieser Methode können Sie die oben erwähnte Datei erstellen.
$ cat > script.bash <<EOF
#!/bin/bash
4i\
s/,/\t\t/
s/,/ /
EOF
Dadurch wird die Skriptdatei erstellt. Sie können dies mit diesem Befehl bestätigen:
$ cat script.bash
#!/bin/bash
4i\
s/,/\t\t/
s/,/ /
Antwort2
sed -i '4i\
s/,/\t\t/
s/,/ /' baconFile
sed funktioniert wie die meisten Interpreter, mehrere Befehle können in separaten Zeilen stehen oder durch getrennt sein ;
. Wenn Sie dies in der ersten Zeile nicht tun, GNU sed
kann dies zu einem Fehler führen.
Um ein Sed-Skript zu erstellen, geben Sie in Ihrem Shebang einfach den absoluten Pfad zu Ihrem Sed-Interpreter an und stellen Sie sicher, dass die Datei ausführbar ist.
#!/bin/sed -f
s/foo/bar/
chmod u+x foo
./foo <<<foo
bar
oder das Skript könnte zusammen mit dem sed-Befehl aufgerufen werden.
sed -i -f foo file
Antwort3
Sie brauchen die -f
Möglichkeitsed -f sed-script
Antwort4
Sie können dazu ein Bash- oder Korn-Shell-Skript schreiben. Wenn Sie es dynamisch gestalten möchten, können Sie es so einrichten, dass es einen Dateinamen als Parameter annimmt, und Sie können diese Sed-Befehle für jede gewünschte Datei ausführen.
Erstellen Sie eine neue Datei, sagen wirupdatefile.sh
#!/bin/bash
#$1 is the first parameter being passed when calling the script. The variable filename will be used to refer to this.
filename=$1
sed '4i\ ' filename
sed 's/,/\t\t/' filename
sed 's/,/ /' filename
Sie können dann ausführen updatefile.sh baconFile
, wodurch alle drei Sed-Befehle für die Datei ausgeführt werden baconFile
.
Außerdem g
aktualisiert die Option in sed alle Vorkommen der Variable in der Datei. Beispiel:
sed 's/,/ /g' filename