Verwenden von sed
:
sed 's/^[^"]*"\([^"]*\)".*/\1/'
Das sucht nach: Zeilenanfang, einer Reihe von Nicht-Anführungszeichen, einem doppelten Anführungszeichen, einer Reihe von Nicht-Anführungszeichen, einem doppelten Anführungszeichen und allem anderen in der Zeile und ersetzt es durch das erfasste Material.
$ sed 's/^[^"]*"\([^"]*\)".*/\1/' <<'EOF'
> xyz... rsync: "/home/path/to/file": Permission denied (13) rsync:
> "/home/path/to/file1": Permission denied (13) rsync:
> "/home/path/to/file2": Permission denied (13) rsync:
> "/home/path/to/file3": Permission denied (13)
> EOF
/home/path/to/file
/home/path/to/file1
/home/path/to/file2
/home/path/to/file3
$
Testen Sie auf RHEL 5 Linux mit GNU sed
, aber nur mit Funktionen, die in der 7. Edition von UNIX ™ funktionieren würden sed
.
Eine etwas einfachere Möglichkeit ist übrigens die Verwendung von zwei Ersatzbefehlen. ändere alles bis einschließlich des ersten Anführungszeichens in eine leere Zeichenkette (das ist eine Folge von null oder mehr nicht Anführungszeichen, gefolgt von einem doppelten Anführungszeichen); ändere alles nach dem, was jetzt das erste doppelte Anführungszeichen ist, in nichts:
sed 's/^[^"]*"//; s/".*//'
Übrigens druckt der von Ihnen ausgeführte Befehl (`sed -n '/" /, / "/ p') von einer Zeile mit einem doppelten Anführungszeichen in die nächste Zeile mit einem doppelten Anführungszeichen, ohne die Zeilen zu bearbeiten. Aus diesem Grund schien es bei Ihnen nicht zu funktionieren - es hat getan, was Sie gefragt haben, aber was Sie von ihm verlangt haben, war nicht das, was Sie von ihm verlangt haben.
In Bezug auf die Effizienz ist es unwahrscheinlich, dass es einen messbaren Unterschied in der Leistung gibt. In Bezug auf die Wartungsfreundlichkeit vermute ich, dass letztere die Gehirnzellen weniger belastet.