Grep expression between double quotes

 
Thread Tools Search this Thread
Homework and Emergencies Emergency UNIX and Linux Support Grep expression between double quotes
# 22  
Old 12-24-2009
@Radoulov:
beautiful solution!!

I can not figure out why it skips lines that begin with http:// (without surrounding double quotes) somehow putting a caret in front of that fixes it but I can't figure out why. The only flaw I could find is when the first line starts with http://

Code:
$ printf 'http://www bla bla "http://xxx" http://yyy\nhttp://zzz\n' |awk -v  RS=\" '/^http/&&$0=RS$0RS'
"http://www bla bla "
"http://xxx"

Quote:
Originally Posted by aaiaz
Scrutinizer it is not working:-
Strange:
Code:
$ echo '"http://a.b.c" blablabla "http://b.b.f"'|sed 's|\"http://[^\"]*\"|&\n|g' | sed -n 's|.*\("http://[^"]*"\).*|\1|p'
"http://a.b.c"
"http://b.b.f"

perhaps you have to use xpg4 sed ?

Last edited by Scrutinizer; 12-24-2009 at 08:31 AM..
# 23  
Old 12-24-2009
Quote:
I can not figure out why it skips lines that begin with http:// (without surrounding double quotes) somehow putting a caret in front of that fixes that but I can't figure out why
That's correct, as you correctly point out, we need the ^ to match only the occurrences between double quotes: RS is defined as ", so, except for the first line, we get the correct output.

Or you're asking a different thing?

If I'm not missing something again, this should fix the issue with the first line:

Code:
awk '/^["]*http:/&&$0=RS$0RS' RS=\"


Last edited by radoulov; 12-24-2009 at 08:44 AM.. Reason: English ...
# 24  
Old 12-24-2009
Code:
printf 'http://www bla bla "http://xxx" http://yyy\nhttp://zzz\n' | awk '/^["]*http:/&&$0=RS$0RS' RS=\"

It doesn't fix it. It is nitpicking obviously but it is interesting to understand why:

What I meant earlier is if you just look at what the RS does:
Code:
$ printf 'http://www bla bla "http://xxx" http://yyy\nhttp://zzz\n' | awk 1 RS=\"
http://www bla bla
http://xxx
 http://yyy
http://zzz

Then why is using /^http:/ skipping http://zzz ?

---------- Post updated at 13:53 ---------- Previous update was at 13:45 ----------

I found my own answer:
Code:
$ printf 'http://www bla bla "http://xxx" http://yyy\nhttp://zzz\n' | awk NR==3 RS=\"
 http://yyy
http://zzz

up till now I thought awk was working on a line basis but it appears to be working on a record basis, it is just that the default record separator coincides with a newline. Great...
# 25  
Old 12-24-2009
Quote:
It doesn't fix it
Sure, sorry Smilie

Another shot:

Code:
awk '(NR==1&&/^"http:/||NR>1&&/^http:/)&&$0=RS$0RS' RS=\"

or (less efficient):

Code:
awk '$0~"^"(NR==1?"\"":x "http:")&&$0=RS$0RS' RS=\"

Quote:
Then why is using /^http:/ skipping http://zzz ?
Because in that case http://zzz is not at the beginning of the line.

---------- Post updated at 02:03 PM ---------- Previous update was at 01:57 PM ----------

Quote:
up till now I thought awk was working on a line basis but it appears to be working on a record basis, it is just that the default record separator coincides with a newline
To be precise, in this case, as far as the output is concerned, it's the default output record separator that matters.
Of course, there is even more (even Perl does not have this one), in GNU AWK the RS could be a regexp (see also the powerful RT built-in variable),

Last edited by radoulov; 12-24-2009 at 09:13 AM..
# 26  
Old 12-24-2009
Quote:
Originally Posted by radoulov
To be precise, in this case, as far as the output is concerned, it's the default output record separator that matters.
Are you sure?
Code:
$ printf 'http://www bla bla "http://xxx" http://yyy\nhttp://zzz\n' | awk NR==3 RS=\" ORS=""
 http://yyy
http://zzz

# 27  
Old 12-24-2009
Quote:
Originally Posted by Scrutinizer
Are you sure?
Code:
$ printf 'http://www bla bla "http://xxx" http://yyy\nhttp://zzz\n' | awk NR==3 RS=\" ORS=""
 http://yyy
http://zzz

Yes,
I said: as far as the output is concerned.
I mean:

Code:
% printf 'http://www bla bla "http://xxx" http://yyy\nhttp://zzz\n' | 
  awk NR==3 RS=\" ORS=
 http://yyy
http://zzz

vs.

Code:
$ printf 'http://www bla bla "http://xxx" http://yyy\nhttp://zzz\n' | awk NR==3 RS=\" OR=\"
 http://yyy
http://zzz
"$

Re-reading your statement:

Quote:
[...]but it appears to be working on a record basis, it is just that the default record separator coincides with a newline
... I realize that you meant something different (and far more obvious Smilie).
# 28  
Old 12-24-2009
Quote:
Originally Posted by radoulov
Re-reading your statement:

... I realize that you meant something different (and far more obvious Smilie).
I agree it is obvious and I realize I knew that already, but sometimes in a different context it takes a renewed realization to really realize something if that make any sense... Oh well Smilie

---------- Post updated at 14:31 ---------- Previous update was at 14:24 ----------

Quote:
Originally Posted by radoulov
Sure, sorry

Another shot:

Code:
awk '(NR==1&&/^"http:/||NR>1&&/^http:/)&&$0=RS$0RS' RS=\"

or (less efficient):

Code:
awk '$0~"^"(NR==1?"\"":x "http:")&&$0=RS$0RS' RS=\"

B
Yes, both work fine...
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Replace Double quotes within double quotes in a column with space while loading a CSV file

Hi All, I'm unable to load the data using sql loader where there are double quotes within the double quotes As these are optionally enclosed by double quotes. Sample Data : "221100",138.00,"D","0019/1477","44012075","49938","49938/15043000","Television - 22" Refurbished - Airwave","Supply... (6 Replies)
Discussion started by: mlavanya
6 Replies

2. Shell Programming and Scripting

Replace double quotes with a single quote within a double quoted string

Hi Froum. I have tried in vain to find a solution for this problem - I'm trying to replace any double quotes within a quoted string with a single quote, leaving everything else as is. I have the following data: Before: ... (32 Replies)
Discussion started by: pchang
32 Replies

3. Shell Programming and Scripting

Issue with Single Quotes and Double Quotes for prompt PS1

Hi, Trying to change the prompt. I have the following code. export PS1=' <${USER}@`hostname -s`>$ ' The hostname is not displayed <abc@`hostname -s`>$ uname -a AIX xyz 1 6 00F736154C00 <adcwl4h@`hostname -s`>$ If I use double quotes, then the hostname is printed properly but... (3 Replies)
Discussion started by: bobbygsk
3 Replies

4. Shell Programming and Scripting

Replace double double quotes using AWK/SED

Hi, I have data as "01/22/97-"aaaaaaaaaaaaaaaaa""aaa""aabbbbbbbbcccccc""zbcd""dddddddddeeeeeeeeefffffff" I want to remove only the Consequitive double quotes and not the one which occurs single. My O/P must be ... (2 Replies)
Discussion started by: Bhuvaneswari
2 Replies

5. UNIX for Dummies Questions & Answers

how to use grep: finding a string with double quotes and multiple digits

I have a file with a lot of lines (a lot!) that contain 10 digits between double quotes. ie "1726937489". The digits are random throughout, but always contain ten digits. I can not for the life of me, (via scouring the internet and grep how-to manuals) figure out how to find this when I search.... (3 Replies)
Discussion started by: titusbass
3 Replies

6. UNIX for Dummies Questions & Answers

grep single quotes or double quotes

Unix superusers, I am new to unix but would like to learn more about grep. I am very familiar with regular expressions as i have used them for searching text files in windows based text editors. Since I am not very familiar with Unix, I dont understand when one should use GREP with the... (2 Replies)
Discussion started by: george_vandelet
2 Replies

7. Shell Programming and Scripting

Double Quotes with sh -c

Hi, I am using the following command to create a log file. echo "`date` Starting the workflow" >> MYLOG_`date '+%d%m%Y'`.log My application (Informatica) takes the above command and issues the following to the UNIX server. sh -c "echo "`date` Starting the workflow" >> MYLOG_`date... (1 Reply)
Discussion started by: sysdata
1 Replies

8. Shell Programming and Scripting

Single quotes and double quotes

Hi guys, I have a sed line in double quotes which works fine, but I want it to be in single quotes here is the sed line sed "/abc_def/s/\'.*\'/\'\${abc_def}\'/" can some one give the equivalent to the above script in single quotes Thanks a ton (5 Replies)
Discussion started by: sol_nov
5 Replies

9. Shell Programming and Scripting

Double quotes or single quotes when using ssh?

I'm not very familiar with the ssh command. When I tried to set a variable and then echo its value on a remote machine via ssh, I found a problem. For example, $ ITSME=itsme $ ssh xxx.xxxx.xxx.xxx "ITSME=itsyou; echo $ITSME" itsme $ ssh xxx.xxxx.xxx.xxx 'ITSME=itsyou; echo $ITSME' itsyou $... (3 Replies)
Discussion started by: password636
3 Replies

10. UNIX for Dummies Questions & Answers

grep exclude/find single and double quotes

Hello, I'm trying to use grep or egrep to exclude a whole range of characters but how do I exclude both a single and a double quote. It might be easier to say how do I use grep to find both single and double quotes. grep ' ' " ' file grep detects the first single quote within my... (4 Replies)
Discussion started by: Lindy_so
4 Replies
Login or Register to Ask a Question