Using sed to delete string between delimiters


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Using sed to delete string between delimiters
# 8  
Old 11-14-2007
awk

HI,
This one.

code:

Code:
awk 'BEGIN{FS="|"}
{
for (i=1;i<=NF;i++)
if($i!=" ")
printf("%s|",substr($i,index($i,":")+1))
printf("\n")
}' filename

# 9  
Old 11-14-2007
You can use the same regex in awk:
Code:
> echo 'P1|10,9:12/123456789|,10:1|11,10:60|15,9:5/12345|,10:1|'|awk '{gsub(/\|[^|]*:/,"|",$0);print}'
P1|12/123456789|1|60|5/12345|1|

# 10  
Old 11-14-2007
And another awk version:

Code:
awk '$1=$1' OFS= FS="[^|]*:"

Use nawk or /usr/xpg4/bin/awk on Solaris.

Or a bit modified version of the previous sed solution:

Code:
sed 's/[^|]*://g'

# 11  
Old 11-14-2007
Quote:
Originally Posted by radoulov
Code:
awk '$1=$1' OFS= FS="[^|]*:"

Very nice i didn't know OFS/FS could be a regex in awk.

Thx radoulov.
# 12  
Old 11-14-2007
wow! so many answers, which one to choose? Smilie

just another question though...when I have the choice of solving something like this using awk or sed, which one should i choose and why? is on better than the other in terms of performance?
# 13  
Old 11-14-2007
Quote:
Originally Posted by Klashxx
Very nice i didn't know OFS/FS could be a regex in awk.
Yes,
and GNU Awk (and may be tawk?) supports regular expressions
even for RS.
# 14  
Old 11-14-2007
ou might be interested in this post by me, which was written somewhat with tongue-in-cheek.

To cut a long story short: When you need to work context-oriented *) use awk, as doing this in sed is a nightmare. As long as speed is a consideration try to use sed as often as possible as it is much faster than awk. Something like

print - "$string" | awk '{print $4}'

is wasting a mighty tool on trivial problems - use sed and/or cut for this.

Still "wasting" is not always the same. Compare the above line to:

Code:
(( i = 0 ))
while [ $i -le 100000 ] ; do
     print - "$string" | awk '{print $4}'
     (( i += 1 ))
done

Same line, quite different effect as the line is not executed once but a 100000 times. The effect of changing from awk to sed/cut will probably be negligable in the first example but will probably be very big in the second one.

Or, other aspect:

Code:
cat file | while read string ; do
     print - "$string" | awk '{print $4}'
done

In this case it will depend on how big "file" is: the loop will get executed once for every line of the input file. If this is 5 lines long it won't matter, if it is a database dump with millions of lines it will make a big difference.

As a general consideration: try to learn both tools equally well. Both have their merits and avoid getting in a situation where "the only tool you have is a hammer and therefore everything starts looking like nail".

I hope this helps.

bakunin

*) "Context-oriented" means: problems like "get all numbers in a file totalling them" or "get the content of a certain line and apply changes to the other lines following it depending on this content" or something like that.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sed delete leading spaces in a .csv if not in a string

Solaris, ksh I have a .csv file I am trying to clean up before loading into the database. The file contains comma separated columns that have leading spaces which I need to remove. The trouble is, some columns that should not be touched are strings which happen to have the same pattern in them. ... (4 Replies)
Discussion started by: gary_w
4 Replies

2. Shell Programming and Scripting

delete the line with a particular string in a file using sed command.

Hello, I want to delete all lines with given string in file1 and the string val is dynamic. Can this be done using sed command. Sample: vars="test twinning yellow" for i in $vars do grep $i file1 if then echo "Do Nothing" else sed `/$i/d` file1 fi done Using the above... (5 Replies)
Discussion started by: PrasadAruna
5 Replies

3. Shell Programming and Scripting

Delete string between 3rd tab and first pattern with SED

Hello, I have this sentence :Pattern1 Pattern2 Pattern3 Pattern4-which-contains-HELLO-string-and-other-stuff-and-second-HELLO-and-third-HELLO I want to delete everything between the 3rd tab (\t) and the FIRST pattern "HELLO" of the line. Result expected is : Pattern1 ... (7 Replies)
Discussion started by: theclem35
7 Replies

4. Shell Programming and Scripting

SED help delete characters in a string

Hi Please help me to refine my syntax. I want to delete the excess characters from the out put below. -bash-3.00$ top -b -n2 -d 00.20 |grep Cpu|tail -1 | awk -F ":" '{ print $2 }' | cut -d, -f1 4.4% us now i want to delete the % and us. How wil i do that to make it just 4.4. Thanks (7 Replies)
Discussion started by: redtred
7 Replies

5. UNIX for Dummies Questions & Answers

Delete string between delimiters with sed

Hi, I need to delete all text between "|" delimiters. The line in text file typically looks like this: 1014182| 13728 -rw-r--r-- 1 imac1 staff 7026127 2 okt 2010 |/Users/imac1/Music/iTunes/iTunes Media/Music/Various Artists/We Are the World_ U.S.A. for Africa/01 We Are the World.mp3... (2 Replies)
Discussion started by: andrejm
2 Replies

6. Shell Programming and Scripting

sed delete wildcard within a string

Hi I would like to batch delete the "note" entry from bib files. The start would be defined by "note ={" and the end by "}." (see example bib entry below). I tried the following command which does not have any effect: cat input.bib| sed -e 's/note = {.*}.//' > output.bib Any help would... (2 Replies)
Discussion started by: gerggeismann
2 Replies

7. Shell Programming and Scripting

SED delete string from till problems

Hi i have a file which contains 2 lines, line 1 is static data. line 2 is a very large string(over 3000char or much more). in that string are tags which i want to delete. e.g. <order1>123</order1><tag1>data</tag1><new>1</new><order2>124</order2><tag1>data</tag1> all one one line. now i... (5 Replies)
Discussion started by: subby80
5 Replies

8. Shell Programming and Scripting

delete multiline string from file using sed.

Hi, I have file which has the following content... GOOD MORNING **********WARNING********** when it kicks from the kickstart, sshd daemon should start at last. (WHEN KICKING ITSELF, NOT AFTER KICKING). /etc/rc3.d/S55sshd ( run level specification for sshd is 55, now I would want to... (4 Replies)
Discussion started by: skmdu
4 Replies

9. Shell Programming and Scripting

using sed command to delete a string spanning multiple lines

file1 contains the following data sssssssssss firstline secondline pppppppppp ssssssssss Using sed comamnd i am trying to delete firtsline secondline. so, output should be sssssssssss pppppppppp ssssssssss I tried in the following the way, but it is not working. sed ... (9 Replies)
Discussion started by: radha.kalivar
9 Replies

10. UNIX for Dummies Questions & Answers

Using sed to delete a string?

Hi all! Here is my problem : I have a string like the following : 20030613170404;BAN_CAV ; starting script Loader.sh on ; 13/06/2003 at ; 17;04;03 I want to eraze all characters located after "Loader.sh", because there are unuseful. I tried to use sed...but it didnt work....i guess i... (1 Reply)
Discussion started by: HowardIsHigh
1 Replies
Login or Register to Ask a Question