Utilizando sed
:
sed 's/^[^"]*"\([^"]*\)".*/\1/'
Eso busca: comienzo de línea, una serie de no comillas, una comilla doble, captura una serie de no comillas, una comilla doble y cualquier otra cosa en la línea, y lo reemplaza por el material capturado.
$ 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
$
Probar en RHEL 5 Linux con GNU sed
, pero solo utilizando características que habrían funcionado en la 7ª edición de la versión UNIX ™ de sed
.
Por cierto, una forma un poco más simple de hacerlo es con dos comandos sustitutos; cambie todo hasta e incluyendo la primera comilla doble a una cadena vacía (es una secuencia de cero o más comillas no seguidas de una comilla doble); cambie todo después de lo que ahora es la primera cita doble a nada:
sed 's/^[^"]*"//; s/".*//'
Por cierto, el comando que intentó ('sed -n' / "/, /" / p ') se imprime desde una línea que contiene una comilla doble a la siguiente línea que contiene una comilla doble, sin editar las líneas en absoluto. Por eso no pareció funcionar para usted: hizo lo que le pidió, pero lo que le pidió que hiciera no era lo que tenía la intención de pedirle.
En cuanto a la eficiencia, es poco probable que haya una diferencia apreciable en el rendimiento. En términos de facilidad de mantenimiento, sospecho que este último es menos exigente para las células cerebrales.