Regular Expression - Replace if x contains y except if...


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Regular Expression - Replace if x contains y except if...
# 1  
Old 03-04-2009
Regular Expression - Replace if x contains y except if...

Hi all,

I have a file which contains 1000s of lines of text. I need to delete all lines with the words "Red" EXCEPT if the line also contains the word "GREEN"...

For example:

ThisIs some random text that should be red deleted
ThisIs some random text that should NOT be red deleted green

In this case the first line should be deleted totally BUT the second line should remain in the file...Any suggestions on this would be appreciated,
# 2  
Old 03-04-2009
one way:
Code:
awk ' { if(index($0, "green" )>0)  {print $0; next}
          if(index($0, "red") >0 ) {next}
          print $0
        } ' inputfile > newfile

# 3  
Old 03-04-2009
There is probably a more efficient way to di this...

Code:
while read line
do
     echo $line | grep -i red > /dev/null
     if [ $? -eq 0 ]
     then
         echo $line | grep -i green > /dev/null
         if [ $? -eq 0 ]
         then
              echo $line >> new_file
         fi
     else
         echo $line >> new_file
     fi
done < input_file

# 4  
Old 03-04-2009
Code:
 cat temp.txt  | perl -ne 'if(/green/i){print;}else{print unless /red/i} '

# 5  
Old 03-04-2009
Code:
awk '/red/&&!/green/{next}1' infile

Or:
Code:
sed '/red/{/green/!d;}' infile

Or:

Code:
perl -ne'print unless/red/&&!/green/' infile

 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

perl : regular expression to replace the strings

There are 2 strings as below. $str1 = "41148,,,,,,,,,,,,,,,,,,,,,,,,"; $date = "TUE 08-28-2012"; The output should be as below $str1 = "TUE 08-28-2012,,,,,,,,,,,,,,,,,,,,,,,,"; Could anyone please help with the perl regular expression or any other alternative? (3 Replies)
Discussion started by: giridhar276
3 Replies

2. UNIX for Advanced & Expert Users

sed: -e expression #1, char 0: no previous regular expression

Hello All, I'm trying to extract the lines between two consecutive elements of an array from a file. My array looks like: problem_arr=(PRS111 PRS213 PRS234) j=0 while } ] do k=`expr $j + 1` sed -n "/${problem_arr}/,/${problem_arr}/p" problemid.txt ---some operation goes... (11 Replies)
Discussion started by: InduInduIndu
11 Replies

3. UNIX for Dummies Questions & Answers

regular expression help

\..\ {3\}$ which one of these does this match rs.ef$tt abc.ab abc.$$$$ abc I think its the 1st one what do you think? Thanks Please use code tags! (2 Replies)
Discussion started by: drew211
2 Replies

4. Programming

Perl: How to read from a file, do regular expression and then replace the found regular expression

Hi all, How am I read a file, find the match regular expression and overwrite to the same files. open DESTINATION_FILE, "<tmptravl.dat" or die "tmptravl.dat"; open NEW_DESTINATION_FILE, ">new_tmptravl.dat" or die "new_tmptravl.dat"; while (<DESTINATION_FILE>) { # print... (1 Reply)
Discussion started by: jessy83
1 Replies

5. Shell Programming and Scripting

Integer expression expected: with regular expression

CA_RELEASE has a value of 6. I need to check if that this is a numeric value. if not error. source $CA_VERSION_DATA if * ] then echo "CA_RELESE $CA_RELEASE is invalid" exit -1 fi + source /etc/ncgl/ca_version_data ++ CA_PRODUCT_ID=samxts ++ CA_RELEASE=6 ++ CA_WEEK_NO=7 ++... (3 Replies)
Discussion started by: ketkee1985
3 Replies

6. UNIX for Advanced & Expert Users

Regular Expression

Hi, How can I use a regular expression that will find only errors of ORA-00600 that does not contain 12333 if the first brackets: example text: ORA-02999 : test message, ignore me ORA-00600: dddd sss ORA-00600: dddd sss sas ORA-00600: internal error code, arguments: , , , , , ... (4 Replies)
Discussion started by: ynixon
4 Replies

7. UNIX for Dummies Questions & Answers

replace words in sed using regular expression

hi, I need to replace all these lines from my text file 123end 234end 324end 234end 989end 258end 924end At the moment I know how to replace "end". But I want to replace the numbers before end as well. How can I do this ? sed s/end/newWord/ myfile.txt newFile.txt thanks (3 Replies)
Discussion started by: aneuryzma
3 Replies

8. Linux

Regular expression to extract "y" from "abc/x.y.z" .... i need regular expression

Regular expression to extract "y" from "abc/x.y.z" (2 Replies)
Discussion started by: rag84dec
2 Replies

9. Shell Programming and Scripting

regular expression

Hi all, My log file is like 19:40:22 INFO :Total time taken to Service External Request---15ms 19:40:22 INFO : External service failed with status KO 19:40:22 FATAL: External service failed with status KO 19:40:22 DEBUG : Batch started with 19:40:22 ERROR: Member: dmidecode.x86_64... (1 Reply)
Discussion started by: subin_bala
1 Replies

10. Shell Programming and Scripting

Regular Expression + Aritmetical Expression

Is it possible to combine a regular expression with a aritmetical expression? For example, taking a 8-numbers caracter sequece and casting each output of a grep, comparing to a constant. THX! (2 Replies)
Discussion started by: Z0mby
2 Replies
Login or Register to Ask a Question