bash - converting regex to sed or grep regex -


i not sure why doesn't work. here regex 'text\' => '.*?' , want catch estrenos , cine in following nasty text using grep or sed. here tried in grep

echo "sadsa d{                             'text' => 'cine',                             'indices' => [                                            111,                                            116                                          ]                           },                           {                             'text' => 'estrenos',                             'indices' => [ ssadw" | grep -eo "'text\' => '.*?'," 

just use awk:

$ awk -v rs='}' -f\' '{print $4}' file cine estrenos 

that work awk in shell on unix box. work no matter white space it'll work whether input on 1 line or spread across multiple lines , no matter how many blanks or tabs occur anywhere on each line.

here's how works:

awk treats input records separated fields. input (with spaces compressed readability):

sadsa d{ 'text' => 'cine', 'indices' => [ 111, 116 ] }, { 'text' => 'estrenos', 'indices' => [ ssadw 

clearly has { ... } records:

record 1:

{ 'text' => 'cine', 'indices' => [ 111, 116 ] } 

record 2:

{ 'text' => 'estrenos', 'indices' => [ ssadw 

so can set record separator } (with -v rs='}'). assume last record end in } if doesn't that's fine awk treats end of file end of record. can ignore text before {s (i.e. "sadsa d" before first record , "," between 2 records - that's treated part of first field we're not using field it's irrelevant.

so given above 2 records if split them fields @ every ' (with -f\') get:

$ awk -v rs='}' -f\' '{for (i=1; i<=nf;i++) print "record nr", nr, "field nr", i, "field contents: <" $i ">"; print "----" }' file record nr 1 field nr 1 field contents: <sadsa d{ > record nr 1 field nr 2 field contents: <text> record nr 1 field nr 3 field contents: < => > record nr 1 field nr 4 field contents: <cine> record nr 1 field nr 5 field contents: <, > record nr 1 field nr 6 field contents: <indices> record nr 1 field nr 7 field contents: < => [ 111, 116 ] > ---- record nr 2 field nr 1 field contents: <, { > record nr 2 field nr 2 field contents: <text> record nr 2 field nr 3 field contents: < => > record nr 2 field nr 4 field contents: <estrenos> record nr 2 field nr 5 field contents: <, > record nr 2 field nr 6 field contents: <indices> record nr 2 field nr 7 field contents: < => [ ssadw > ---- 

so can see value want 4th field of each record.


Comments

Popular posts from this blog

resizing Telegram inline keyboard -

command line - How can a Python program background itself? -

php - "cURL error 28: Resolving timed out" on Wordpress on Azure App Service on Linux -