First off: quotes cannot be nested. The shell maintains a "switch", so to say, if inside a quote or not. If it encounters a quote char reading the input it toggles that switch, if it encounters another, it toggles it again. Therefore your first line doesn't look to the shell as you probably believe it does. If you want to have literal double quotes inside a double quoted string you would have to escape them:
Code:
String="{ \"test\":\"test message\", \"testmessage\":\"subscription is active, charge successfully} \" }"
Second: your definition of what "ends a message" is sloppy. You (correctly) recognize "," as a "message end", because it would start a new message (or message field, ot clear from your example). But this is not true for the last message, which ends with the "line delimiter", a curly bracket. You will have to search for this one too:
Code:
status=$( echo $String | sed -e 's/^.*\("testmessage":[^},]*\).*$/\1/')
A last detail: if you use "$String" unquoted, as you do, your double quotes are "cooked" by the shell, even the escaped ones. In fact the string is parsed two times by the shell, the first time in your variable definition (there the two outside double quotes are stripped off) and then by the "echo"-statement, where the now unprotected quote chars are stripped. This is the difference between these lines:
Code:
echo "$String"
echo $String
Therefore your sed-statement, which matches against double quotes will probably not work at all.
Hi
I have two files and their names are donotcall.txt, filter_it.txt. I want output.txt file with all data that is in filter_it.txt file but not in donotcall.txt. Can anybody help me to write 1-2 lines unix code for this.
donotcall.txt contains following data. Each row represent phone... (3 Replies)
hi all,
here is my question.
i have the following data
Block 1
a b c
d e f
g h i
Block 2
j k l
m n o
p q r
i need to grep all information from block 1 i.e 'a to i' (6 Replies)
Hi,
I have a file with hundreds of records.
There are four fields on each line, separated by semicolons.
Name
Height (meters)
Country
Continent (Africa,Asia,Europe,North America,Oceania,South
America,The Poles)
I need to Write the command to find display how many mountains appear... (1 Reply)
Hi all!
I have a data set in this tab separated format : Label, Value1, Value2
An instance is "data.txt" :
0 1 1
-1 2 3
0 2 2
I would like to parse this data set and generate two files, one that has only data with the label 0 and the other with label -1, so my outputs should be, for... (1 Reply)
Below is the output of a DB2 command. Now I have 2 requirements...
Database Partition 0 -- Database TESTDB1 -- Active Standby -- Up 213 days 02:33:07 -- Date 02/22/2016 17:04:50
HADR Information:
Role State SyncMode HeartBeatsMissed LogGapRunAvg (bytes)
Standby ... (2 Replies)
Hi Everyone,
I have a very simple problem and i am stuck in that from last 8 days. I tried many attempts, googled my query but all in vain.
I have a text file named "test.txt"
In that suppose i have contents like:
Java:
1 Object oriented programming language
2 Concepts of Abstraction... (5 Replies)
Hello All,
I want to print data in between two lines in a file sample.txt through more or cat command on the screen. For that I am using below sed command to give the BEGIN and END text.
Content of sample.txt
server01:~ # cat /proc/mdstat
Hello this is a text message 1
Hello this is a... (5 Replies)
Discussion started by: Xtreme
5 Replies
LEARN ABOUT BSD
unifdef
UNIFDEF(1) General Commands Manual UNIFDEF(1)NAME
unifdef - remove ifdef'ed lines
SYNOPSIS
unifdef [ -t -l -c -Dsym -Usym -idsym -iusym ] ... [ file ]
DESCRIPTION
Unifdef is useful for removing ifdef'ed lines from a file while otherwise leaving the file alone. Unifdef is like a stripped-down C pre-
processor: it is smart enough to deal with the nested ifdefs, comments, single and double quotes of C syntax so that it can do its job, but
it doesn't do any including or interpretation of macros. Neither does it strip out comments, though it recognizes and ignores them. You
specify which symbols you want defined -Dsym or undefined -Usym and the lines inside those ifdefs will be copied to the output or removed
as appropriate. The ifdef, ifndef, else, and endif lines associated with sym will also be removed. Ifdefs involving symbols you don't
specify are untouched and copied out along with their associated ifdef, else, and endif lines. If an ifdef X occurs nested inside another
ifdef X, then the inside ifdef is treated as if it were an unrecognized symbol. If the same symbol appears in more than one argument, only
the first occurrence is significant.
The -l option causes unifdef to replace removed lines with blank lines instead of deleting them.
If you use ifdefs to delimit non-C lines, such as comments or code which is under construction, then you must tell unifdef which symbols
are used for that purpose so that it won't try to parse for quotes and comments in those ifdef'ed lines. You specify that you want the
lines inside certain ifdefs to be ignored but copied out with -idsym and -iusym similar to -Dsym and -Usym above.
If you want to use unifdef for plain text (not C code), use the -t option. This makes unifdef refrain from attempting to recognize com-
ments and single and double quotes.
Unifdef copies its output to stdout and will take its input from stdin if no file argument is given. If the -c argument is specified, then
the operation of unifdef is complemented, i.e. the lines that would have been removed or blanked are retained and vice versa.
SEE ALSO diff(1)DIAGNOSTICS
Premature EOF, inappropriate else or endif.
Exit status is 0 if output is exact copy of input, 1 if not, 2 if trouble.
BUGS
Does not know how to deal with cpp consructs such as
#if defined(X) || defined(Y)
AUTHOR
Dave Yost
4.3 Berkeley Distribution April 29, 1985 UNIFDEF(1)