2014-11-21 7 views
6

ho attualmente ottenuto una stringa come di seguito:Usando sed per estrarre una sottostringa tra parentesi graffe

[email protected]{Wed Nov 19 14:17:32 2014} branch: thebranch 

Questo è contenuto in un file, e ho analizzare la stringa. Comunque voglio il valore tra parentesi {Wed Nov 19 14:17:32 2014}

Non ho esperienza con Sed, e ad essere sincero lo trovo un po 'criptico.

Finora sono riuscito a utilizzare il seguente comando, tuttavia l'output è ancora l'intera stringa.

Cosa sto sbagliando?

sed -e 's/[^/{]*"\([^/}]*\).*/\1/' 

risposta

3

Per ottenere i valori che era tra {, }

$ sed 's/^[^{]*{\([^{}]*\)}.*/\1/' file 
Wed Nov 19 14:17:32 2014 
2

Questo potrebbe funzionare

sed -e 's/[^{]*\({[^}]*}\).*/\1/g' 

prova

$ echo "[email protected]{Wed Nov 19 14:17:32 2014} branch: thebranch" | sed -e 's/[^{]*{\([^}]*\)}.*/\1/g' 

mer nov 19 14:17:32 2014

Regex

  • [^{]* Partite altro che la {, cioè [email protected]

  • ([^}]*) gruppo Capture 1

    • \{ Partite {

    • [^}]* partite qualcosa di diverso da }, cioè Wed Nov 19 14:17:32 2014

    • \} corrisponde a un }

  • .* corrisponde al resto

4

Questo è molto semplice da fare con awk, non complicato regex.

awk -F"{|}" '{print $2}' file 
Wed Nov 19 14:17:32 2014 

Si imposta il separatore di campo per { o }, quindi i vostri dati saranno nel secondo campo.

FS potrebbe essere impostato in questo modo a:

awk -F"[{}]" '{print $2}' file 

Per vedere tutti i campi:

awk -F"{|}" '{print "field#1="$1"\nfield#2="$2"\nfield#3="$3}' file 
field#[email protected] 
field#2=Wed Nov 19 14:17:32 2014 
field#3= branch: thebranch 
1

Semplicemente, sotto il comando anche ottenere i dati ...

echo "[email protected]{Wed Nov 19 14:17:32 2014} branch: thebranch" | sed 's/.*{\(.*\)}.*/\1/g'