Müssen Sie die sed
? Wenn Sie ein Bash-Skript schreiben, können Sie Folgendes tun
#!/bin/bash
pattern='abc'
replace='def'
file=/path/to/file
tmpfile="${TMPDIR:-/tmp}/$( basename "$file" ).$$"
while read -r line
do
echo "${line//$pattern/$replace}"
done < "$file" > "$tmpfile" && mv "$tmpfile" "$file"
Mit einer älteren Bourne-Shell (z. B. ksh88 oder POSIX sh) haben Sie möglicherweise nicht diese Möglichkeiten ${var/pattern/replace}
Struktur, aber Sie haben ${var#pattern}
y ${var%pattern}
mit dem die Zeichenkette aufgespalten und wieder zusammengesetzt werden kann. Wenn Sie das tun müssen, müssen Sie viel mehr Code eingeben - aber es ist wirklich nicht so schlimm.
Wenn Sie nicht schon in einem Shell-Skript sind, können Sie ganz einfach die Parameter pattern, replace und filename angeben und dann einfach das hier aufrufen :)
PS: Die ${TMPDIR:-/tmp}
Struktur verwendet $TMPDIR
wenn diese in Ihrer Umgebung gesetzt ist, oder verwendet /tmp, wenn die Variable nicht gesetzt ist. Ich hänge gerne die PID des aktuellen Prozesses an das Ende des Dateinamens an, in der Hoffnung, dass es dann etwas eindeutiger ist. Sie sollten wahrscheinlich mktemp
oder ähnliches in der "realen Welt", aber für ein kurzes Beispiel ist das in Ordnung, und die mktemp
binär ist nicht immer verfügbar.