Voglio fare corrispondenze di pattern non avide (espressione regolare) in awk
. Ecco un esempio:
echo "@article{gjn, Author = {Grzegorz J. Nalepa}, " | awk '{ sub(/@.*,/,""); print }'
È possibile scrivere un'espressione regolare che seleziona la stringa più corta?
@article{gjn,
invece di questa lunga stringa ?:
@article{gjn, Author = {Grzegorz J. Nalepa},
Voglio ottenere questo risultato:
Author = {Grzegorz J. Nalepa},
Ho un altro esempio:
echo " , articolo {gjn, Autore = {Grzegorz J. Nalepa}," | awk '{sub (/ , [^,] *, /, ""); Stampa }' ↑ ↑ ^^^^^
Nota che ho cambiato i @
caratteri in virgola ( ,
) nella prima posizione sia della stringa di input che dell'espressione regolare (e anche cambiato .*
in [^,]*
). È possibile scrivere un'espressione regolare che seleziona la stringa più corta?
, Author = {Grzegorz J. Nalepa},
invece della stringa più lunga ?:
,article{gjn, Author = {Grzegorz J. Nalepa},
Voglio ottenere questo risultato:
,article{gjn
Author
seguire una virgola e uno spazio bianco, seguito da uno spazio bianco seguito da uno=
spazio bianco{
seguito da uno non}
seguito da}
, anche se questo richiede (tra le altre cose) che non puoi annidare{}
all'interno della= { ... }
parte.