Usando una expresión regular compatible con Perl con GNU grep -P

Usando una expresión regular compatible con Perl con GNU grep -P

Estoy usando esta expresión regular (?<=\[')[^,]*en un archivo que contiene la siguiente líneadisk = ['OVS/sdasd/asdasd/asdasd/something.img, w']

quiero que eso regreseOVS/sdasd/asdasd/asdasd/something.img

¿Cómo lo uso greppara que funcione?

Lo intenté grep -P "(?<=\[')[^,]*"pero devuelve toda la línea.

Respuesta1

Agregue el -omodificador para que grepsolo devuelva lo que coincida con el patrón que está buscando:

$ grep -Po "(?<=\[')[^,]*" data.txt 
OVS/sdasd/asdasd/asdasd/something.img

Respuesta2

También puede utilizar sedsin la aserción de búsqueda para una mayor portabilidad ( -opuede que no esté disponible para su grep):

sed "s!['\(\[^,\]*\),.*\$!\1!;t;d;p" data.txt

Tenga en cuenta el uso "extraño" de escapes de barra invertida aquí. Se debe al hecho de que sedutiliza BRE de forma predeterminada (consulteesta pregunta).

Hablando de portabilidad, ¿por qué no utilizar simplemente Perl?

perl -nle "print \$1 if /\['([^,]*)/" data.txt

Respuesta3

@slm ya te dio la respuesta canónica. Aquí hay algunas opciones más:

Utilice awky 'como delimitador de campo (suponiendo que todas las líneas tengan el mismo formato):

$ awk -F "'" '($1~/ = /){print $2}'
OVS/sdasd/asdasd/asdasd/something.img, w    

Haz todo en Perl:

$ perl -lne 'print $1 if /\[.(.*?).\]/' data.txt 
OVS/sdasd/asdasd/asdasd/something.img, w    

Utilice una expresión regular más simple y analice los resultados:

$ grep "\[.*\]" data.txt | awk -F "'" '{print $2}'
OVS/sdasd/asdasd/asdasd/something.img, w
$ grep -o "\[.*\]" data.txt | perl -pe "s/[\[\]']//g"
OVS/sdasd/asdasd/asdasd/something.img, w
$ grep "\[.*\]" data.txt | sed 's/.*\[.\(.*\).\]/\1/'
OVS/sdasd/asdasd/asdasd/something.img, w
$ grep "\[.*\]" data.txt | perl -pne 's/.*\[.(.*?).\].*/$1/'
OVS/sdasd/asdasd/asdasd/something.img, w
$ grep "\[.*\]" data.txt | perl -lne 'print $1 if /\[.(.*?).\]/'
OVS/sdasd/asdasd/asdasd/something.img, w

información relacionada