Visit The New, Modern Unix Linux Community


sed [delete everything between two words]


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers sed [delete everything between two words]
# 1  
Computer sed [delete everything between two words]

Hi,

I have the following codes below that aims to delete every words between two pattern word. Say I have the files
Quote:
$ cat file.txt
hello
start
WISH_LIST="
candy
money
t-shirt
"
stop
cool
Christmas
To delete every word between WISH_LIST=" and " I used the below codes (but its not working):

Code:
#!/bin/sh
sed '
/WISH_LIST=\"/ {
N
/\n.*\"/ {
s/WISH_LIST=\".*\n.*\"/WISH_LIST=\"\n\"/
}
}' file.txt

and also I have tried this code:
Code:
#!/bin/sh
sed '
/WISH_LIST=\"/ {
N
/WISH_LIST=\".*\"/ {
s/WISH_LIST=\".*\"/WISH_LIST=\"\n\"/
P
D
}
}' file.txt

Any Idea why I can't have the below output from the codes above:

Quote:
$ cat file.txt
hello
start
WISH_LIST="
"
stop
cool
Christmas
# 2  
in shell
Code:
f=0
while read line 
do
    case $line in
    WISH_LIST* ) f=1; echo $line;;
    '"'* ) f=0;;
    esac
    if [ $f -eq 1 ];then        
        continue
    else
        echo $line
    fi

done < file

# 3  
Hi.

With sed:
Code:
#!/usr/bin/env sh

# @(#) s1       Demonstrate delete lines of range exclusive.
# This solution based on code tutorial at:
# http://sed.sourceforge.net/sedfaq.html
# 2007.12.25

set -o nounset
echo

debug=":"
debug="echo"

## Use local command version for the commands in this demonstration.

echo "(Versions displayed with local utility \"version\")"
version >/dev/null 2>&1 && version bash sed

echo

FILE=${1-data1}
echo " Input file $FILE:"
cat $FILE

echo
echo " Results from sed:"
sed '/WISH_LIST="/,/^"$/{
/WISH_LIST="/b
/^"$/b
d
}' $FILE

exit 0

Producing:
Code:
% ./s1

(Versions displayed with local utility "version")
GNU bash 2.05b.0
GNU sed version 4.1.2

 Input file data1:
hello
start
WISH_LIST="
candy
money
t-shirt
"
stop
cool
Christmas

 Results from sed:
hello
start
WISH_LIST="
"
stop
cool
Christmas

A tip of the hat to Eric Pement ... cheers, drl
# 4  
Or a solution with awk:

Code:
awk '/^WISH/{f=1;print} /^"$/{f=0} !f' file.txt

Regards
 

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #355
Difficulty: Medium
BWK awk, also known as nawk, refers to the awk version by Ken Thompson.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Delete between two words

So;C951;1;2;0;100;true;SNetwork=ORM_RO_MO_R,MeCext=C5951,ManagedElement=1,vsDaFunction=1;473;12;EEE So;C951;2;2;0;100;true;SNetwork=ORM_RO_MO_R,MeCext=L5921,ManagedElement=1,vsDaFunction=4;481;12;EEE Output:- So;C951;1;2;0;100;true;1;473;12;EEE So;C951;2;2;0;100;true;4;481;12;EEE Output... (7 Replies)
Discussion started by: pareshkp
7 Replies

2. Shell Programming and Scripting

Delete some words

hi, i have a fasta file like this: >contig00003 length=363 numreads=45 gene=isogroup00001 status=it_thresh GATTTTTTACCCTGGGAGTGAGGAGGACGAGGTTGAGGATGAAGAAAAGAGAAAGATGAAGAGGTTGAGGATGTT GTAGTCGGCGGTGGAATTAGGGGGAGCCGGCGAGCCCAAGTATTTTGCAGAGGTGTCTTCATCATCCAAACAACA... (3 Replies)
Discussion started by: the_simpsons
3 Replies

3. UNIX for Dummies Questions & Answers

Delete all words not containing letter /s/

I have a word file that looks like: pens binder spiral user I want to delete all the words without the letter /s/, so output looks like: pens spiral user I tried using sed: sed '//d' infile.txt > out.txt (5 Replies)
Discussion started by: pxalpine
5 Replies

4. Shell Programming and Scripting

SED - delete words between two possible words

Hi all, I want to make an script using sed that removes everything between 'begin' (including the line that has it) and 'end1' or 'end2', not removing this line. Let me paste an 2 examples: anything before any string begin few lines of content end1 anything after anything before any... (4 Replies)
Discussion started by: meuser
4 Replies

5. Shell Programming and Scripting

Using Sed to Delete Words in a File

This is a Nagios situation. So i have a list of servers in one file called Servers.txt And in another file called hostgroups.cfg, i want to remove each and every one of the servers in the Servers.txt file. The problem is, the script I wrote is having a problem removing the exact servers in... (5 Replies)
Discussion started by: SkySmart
5 Replies

6. Shell Programming and Scripting

Delete between two words

Hi, I wanted to delete data between two words. Input: I read gihoihsahkjlk write goal hard read hsakdjhkh write work read hlkhlkhlkh write Desired Output: I write goal hard write work write We have to replace the data that comes between 'read' and 'write' with... (3 Replies)
Discussion started by: mahish20
3 Replies

7. UNIX for Dummies Questions & Answers

sed how to delete between two words within a file

I'm hoping someone could help me out please :) I have several .txt files with several hundred lines in each that look like this: 10241;</td><td>10241</td><td class="b">x2801;</td><td>2801</td><td>TEXT-1</td></tr> 10242;</td><td>10242</td><td... (4 Replies)
Discussion started by: martinsmith
4 Replies

8. Shell Programming and Scripting

sed/awk: Delete matching words leaving only the first instance

I have an input text that looks like this (comes already sorted): on Caturday 22 at 10:15, some event on Caturday 22 at 10:15, some other event on Caturday 22 at 21:30, even more events on Funday 23 at 11:00, yet another event I need to delete all the matching words between the lines, from... (2 Replies)
Discussion started by: GrinningArmor
2 Replies

9. UNIX for Advanced & Expert Users

How to delete first 10 words from file

Hi, Could you please let me know, how to delete first 10 words from text files using vi? 10dw will delete it from current line, how to do it for all the lines from file? Thanks (6 Replies)
Discussion started by: sentak
6 Replies

10. UNIX for Dummies Questions & Answers

sed option to delete two words within a file

Could someone please help me with the following. I'm trying to figure out how to delete two words within a specific file using sed. The two words are directory and named. I have tried the following: sed '//d' sedfile sed '//d' sedfile both of these options do not work..... ... (4 Replies)
Discussion started by: klannon
4 Replies

Featured Tech Videos