Tricky sed required


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Tricky sed required
# 15  
Old 05-24-2013
A bit more precise is
Code:
sed -e "s/'\([^']*\)'/\1/g" -e 's/"\[\([^]]*\)\]"/"\1"/g'

Maybe sufficient here.
But I admit that only a perl RE can achieve 100% correctness.
# 16  
Old 05-24-2013
Quote:
Originally Posted by summer_cherry
Code:
while(<DATA>){
	s/(?:[\[\]]|'(?=[^\[]*\]))//xg;
	print;
}
__DATA__
"['1235','3234']","abcde","[1234]","['1235','3234']"
"'","abcde","[1235]","['1236','2234']"
"[1236]","['1237','1234']","","1234"
"'e'","[1237]","['1238','0234']",""

Nice use of the non capturing group plus lookahead.
Works fine also over Python:
Code:
>>> text = """
... "['1235','3234']","abcde","[1234]","['1235','3234']"
... "'","abcde","[1235]","['1236','2234']"
... "[1236]","['1237','1234']","","1234"
... "'e'","[1237]","['1238','0234']",""
... """
>>> pat = """(?:[\[\]]|'(?=[^\[]*\]))"""
>>> print re.sub(pat,'',texto)

"1235,3234","abcde","1234","1235,3234"
"'","abcde","1235","1236,2234"
"1236","1237,1234","","1234"
"'e'","1237","1238,0234",""

# 17  
Old 05-28-2013
Thanks for all the replies

After some fiddling around I settled for this variation on an earlier post -

Code:
#! /bin/bash

sed ':start
      /\['\''/{
    s/\['\''//
    s/'\'']//
    s/'\'','\''/,/
        b start
} 
:finally
      /\[/{
    s/\[//
    s/\]//
    b finally
} ' file

Input -

Code:
"['1235','3234']","abcde","[1234]","['1235','3234']"
"'","abcde","[1235]","['1236','2234']"
"[1236]","['1237','1234']","","1234"
"'e'","[1237]","['1238','0234']",""
"123","wer","123","''"

Output -

Code:
"1235,3234","abcde","1234","1235,3234"
"'","abcde","1235","1236,2234"
"1236","1237,1234","","1234"
"'e'","1237","1238,0234",""
"123","wer","123","''"

# 18  
Old 05-28-2013
I use tr -d to remove characters. With sed, I never use -e, just single quotes around the entire script and if I need a single quote or expanded variable, I drop out of single to double and then right back, e.g. ' inside two ' is: ' " ' " ' or: ' \' ' (without the spaces) Single quotes let less happen.

Last edited by DGPickett; 05-28-2013 at 08:23 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Clarification required on sed

Hi Can some one tell what does this sed command do sed 's/*$//g I am more curious on the highlighted part , can some one explain what does that mean. Thanks Sri (1 Reply)
Discussion started by: Sri3001
1 Replies

2. Shell Programming and Scripting

sed help required

Hi All, I have one file with below type of data in it, $ cat test.txt ###123 ###xyxytuerwb ###2 ###tyupe Here I would like to replace all the characters with "x" after the 3 "###" with the same number of characters. Can you please help me to achieve this. (7 Replies)
Discussion started by: gr8_usk
7 Replies

3. Shell Programming and Scripting

sed tricky problem

Hi, I have a file which contains two strings: AAAAA and BBBBB I have two variables in my script: DATE="03/21/2010" aDate="20100321" I need to replace string AAAAA with variable $DATE and BBBBB with $aDate. Here is what I do sed "s/AAAAA/$DATE/" $BASIC_TMPLT | sed "s/BBBBB/$aDate/" >... (4 Replies)
Discussion started by: axed
4 Replies

4. Shell Programming and Scripting

Another tricky sed or awk question

This post is in reference to https://www.unix.com/shell-programming-scripting/137977-tricky-sed-awk-question-post302428154.html#post302428154 I am trying to go the opposite direction now: I have the following file: a,b,C,f,g a,b,D,f,g a,b,E,f,g h,i,J,k,l m,n,O,t,u m,n,P,t,u m,n,Q,t,u... (3 Replies)
Discussion started by: awayand
3 Replies

5. Shell Programming and Scripting

Tricky sed or awk question

Hello everyone, unfortunately I am no unix nor scripting guru, which is why I am asking for help here. I am trying to reformat a .csv file using sed or awk which has the following format: a,b,C-D-E,f,g h,i,J,k,l m,n,O-P-Q-R-S,t,u v,w,X-Y,z,a It's basically a 5-field text file which has an... (7 Replies)
Discussion started by: awayand
7 Replies

6. Shell Programming and Scripting

Help required with awk/sed

Hi I have a file, with format like: column1|coulumn2|column3|column4 A|X|K|18 L|O|R|31,42,25 G|H|I|55,66 L|E|Q|25,31,94 output required: column1|coulumn2|column3|column4 A|X|K|18 L|O|R|31,25 L|E|Q|25,31 Input File Format: All columns are seperated using |, last column... (8 Replies)
Discussion started by: New to awk
8 Replies

7. Shell Programming and Scripting

Help required in sed or awk.

Hi All, I need to pick up data on both sides of "=" sign. For eg, following is the context that I have. 125.156.125.147=machine1 147.125.185.156=machine2 147.125.185.159=machine3 Can I have the ip address in one variable and machine name in another variable using sed or awk. ... (1 Reply)
Discussion started by: nua7
1 Replies

8. Shell Programming and Scripting

Help in sed required.

Hi All, I am facing a small problem in sed. I want to insert a line in the existing file. Existing code: access to attr=userPassword by self write by * auth access to * by self write by users read by anonymous auth Desired code: access to attr=userPassword by self... (14 Replies)
Discussion started by: nua7
14 Replies

9. UNIX for Dummies Questions & Answers

Sed-- command help required

Hi Gurus, I have a small requirement. Let suppose i have a file test.txt test.txt contains Dispatched date = '2008-04-08' Name = 'Logers' Now i want to add one more line to it as Number of Responses = "$a" $a will be chnaging dynamically which i had grepped it in the script. Now i... (6 Replies)
Discussion started by: pssandeep
6 Replies

10. Shell Programming and Scripting

Tricky Sed

Hello. I am trying to convert occurrences of 'NULL' from a datafile. The 'NULL' occurences appears at this: |NULL| NULL|NULL| NULL|NULL| NULL|NULL| NULL| There should be 52 fields per line. I would like any occurrence of | NULL| or |NULL| to appear as '||' Currently I am using this sed... (2 Replies)
Discussion started by: bestbuyernc
2 Replies
Login or Register to Ask a Question