regex


Editting a string variable in a bash script


I have a bash script which queries a postgresql database (fyi, it is a SOGo groupware database) and gets a string of text into a variable. The value of the variable (let's call it teststr) looks like this:
c_defaults ----------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------
{"SOGoTimeFormat": "%H:%M", "SOGoMailShowSubscribedFoldersOnly": "0", "SOGoMailSignaturePlacement": "below", "SOGoLanguage": "English", "SOGoDayEndTime": "18:00", "SOGoDefaultCalendar": "selected", "SOGoFirstWeekOfYear": "January1", "SOGoFirstDayOfWeek": "0", "SOGoTimeZone": "Asia\/Kolkata", "SOGoContactsCategories": ["Business Partner", "Colleague", "Competitor", "Customer", "Family", "Friend", "Press", "Provider", "VIP"], "Vacation": {"enabled": 0, "endDate": 1374690600, "autoReplyEmailAddresses": ["testuser#testdomain.com"], "ignoreLists": 1, "autoReplyText": "", "daysBetweenResponse": "7", "endDateEnabled": 0}, "SOGoCalendarTasksDefaultClassification": "PUBLIC", "SOGoMailSortByThreads": "0", "SOGoMailMessageCheck": "manually", "SOGoMailMessageForwarding": "inline", "SOGoLoginModule": "Mail", "SOGoCalendarCategoriesColors": {"Customer": "#aaa", "Calls": "#aaa", "Favorites": "#aaa", "Meeting": "#aaa", "Ideas": "#aaa", "Miscellaneous": "#aaa", "Birthday": "#aaa", "Anniversary": "#aaa", "Vacation": "#aaa", "Travel": "#aaa", "Projects": "#aaa", "Suppliers": "#aaa", "Gifts": "#aaa", "Clients": "#aaa", "Issues": "#aaa", "Business": "#aaa", "Holidays": "#aaa", "Personal": "#aaa", "Status": "#aaa", "Public Holiday": "#aaa", "Follow up": "#aaa", "Competition": "#aaa"}, "SOGoBusyOffHours": "0", "SOGoCalendarCategories": ["Customer", "Calls", "Favorites", "Meeting", "Ideas", "Miscellaneous", "Birthday", "Anniversary", "Vacation", "Travel", "Projects", "Suppliers", "Gifts", "Clients", "Issues", "Business", "Holidays", "Personal", "Status", "Competition", "Follow up", "Public Holiday"], "SOGoCalendarEventsDefaultClassification": "PUBLIC", "Forward": {"enabled": 1, "forwardAddress": ["testuser1#testdomain.com", "testuser2#testdomain.com"], "keepCopy": 1}, "SOGoRememberLastModule": "0", "SOGoMailReplyPlacement": "below", "SOGoMailDisplayRemoteInlineImages": "never", "SOGoSieveFilters": [{"actions": [{"method": "fileinto", "argument": "INBOX\/spam"}], "active": 1, "rules": [{"operator": "contains", "field": "subject", "value": "[SPAM]"}], "match": "any", "name": "spam"}, {"actions": [{"method": "fileinto", "argument": "INBOX\/spam"}], "active": 1, "rules": [{"operator": "contains", "field": "subject", "value": "TESTTEST"}], "match": "any", "name": "new"}], "SOGoDayStartTime": "08:00", "SOGoMailComposeMessageType": "text"} (1 row)
Now, what I want to do is remove all the data from the beginning all the way until the opening curly brace(i.e remove c_defaults and all the dashes and one space just before the beginning of the curly brace) and remove the data at the end after the closing curly brace (i.e. the whitespace and the '(1 row)' string).
At the end, the teststr string should only have the values inside the curly braces. Is there any sort of regex/awking that can be done to edit this string?
Edit
I tried the following steps:
Wrote the variable called teststr into a file. catted and awked the file from $3 to $187 (for this example) into another file and read that into a variable. But the size isn't always going to remain the same as values inside the curly braces will surely increase as the user saves more options.
You can use sed to remove anything up to the first { and everything after }:
sed -e 's/^[^{]*//g' -e 's/}[^}]*$/}/' file
Use sed to do an in-place edit. (-i option). This can be called from bash.
sed -i -e 's/c_defaults\s[-\s]+//g' filename
Use Perl to do an in-place edit. (-i option). Invoked by bash.
> perl -pi -e 's/c_defaults\s[-\s]+//g' filename
You could just match the container with sed:
sed -ne '/{.*}/{ s|^[^{]*\({.*}\)[^}]*$|\1|; p; }' file
If you get data from a command you could just pipe it:
your_command a b | sed -ne '/{.*}/{ s|^[^{]*\({.*}\)[^}]*$|\1|; p; }'
And save it to a variable:
VAR=$(your_command a b | sed -ne '/{.*}/{ s|^[^{]*\({.*}\)[^}]*$|\1|; p; }')

Related Links

How do I create a Scala Regex that is compiled using Java Pattern.COMMENTS?
Is there a way to search terms in order with RegexpQuery in lucene?
Regex to allow any charcter EXCEPT backslash
Regex: Match a condition, then find the first occurrence of another condition that precedes it on the same line. Possible?
Regex for URL routing - match alphanumeric and dashes except words in this list
R: gsub and capture
Trouble with regex in Perl
Duplicate symbols in regular expressions
NSRegularExpression to remove the rest codes
Regex replace in sublimetext2
Regular Expression Search Replace all non leading tabs with single space Notepad++
Django regular expression on success format
Reg ex required for finding two ||
regex from first character to the end of the string
How can I recognize the following group of strings using a grammar or regex?
htaccess redirect begins with

Categories

HOME
document
configuration
apacheds
azure-web-sites
jsonschema
prometheus
wikipedia-api
cross-domain
drag
prestashop-1.7
executable
coreos
lazy-loading
jquery-selectors
api-design
advantage-database-server
ormlite-servicestack
semantics
profiling
naturallyspeaking
flexjs
jsplumb
dlopen
webcenter
capstone
google-crawlers
jetty-9
sourcetree
transpose
message-hub
nomenclature
btle
linear
sdcc
android-calendar
website-hosting
ganglia
database-cleaner
replaygain
soql
maven-versions-plugin
javascript-security
haste
tryton
facebook-canvas
swift-package-manager
findall
iseries-navigator
mailcore2
perspective
vb4android
webpagetest
finalcut
qlpreviewcontroller
rras
intrinsics
airplay
hl7-v2
multiple-files
mysqladmin
metalkit
spymemcached
netbsd
xerces
boost-coroutine
mkpolyline
fortrabbit
gcovr
applicationstate
datacontractserializer
short
hebrew
tlb
array-address
sugar.js
xhtml-transitional
nsmanagedobjectmodel
kmz
google-authorship
hogan.js
datadesign
shebang
pixelsense
android-actionmode
time-limiting
obout
httpconnection
livevalidation
postgresql-8.1
textboxlist
xoom
markitup
sharepoint-feature
metaphone
corporate-policy

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App