Grep for an exact match in a file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Grep for an exact match in a file
# 1  
Old 07-11-2017
Grep for an exact match in a file

I am currently having some issues while trying to grep for a exact string inside a file. I have tried doing this from command line and things work fine i.e. when no match is found, return code=1 but when its done as part of my script it returns 0 for the same command - I dont know if there is an issue with the variable? Or if its because its part of a loop?

Code:
 
 grep -E '^$variable' file.csv

Above is the current code I use but have also tried others but no luck

The variable that I am using is a string that looks something like

Code:
TEST1-AA_test.csv

Any help would be appreciated.

Last edited by Ads89; 07-11-2017 at 08:04 AM..
# 2  
Old 07-11-2017
Don't use single quotes (which prevent expansion by the shell), but double quotes:
Code:
grep -E "^$variable" file.csv

This User Gave Thanks to RudiC For This Post:
# 3  
Old 07-11-2017
Still having the same issue even with double quotes - Here is a copy from the log

Code:
+ TRIM_FILENAME=TEST1-AAA_test.csv
+ grep -E '^TEST1-AAA_test.csv' Valid_List.csv
+ '[' 0 = 0 ']'
+ echo -e 'TEST1-AAA_test.csv needs to be sent \n'
TEST1-AAA_test.csv needs to be sent

Code:
 
 grep -E "^${TRIM_FILENAME}" Valid_List.csv

# 4  
Old 07-11-2017
Perhaps you need to add a trailing $ to your search string. In the way that ^ at the start matches the start of line, a $ at the end matches the end of the line.

Does that help?

Your output is rather confusing in that you don't show us the code. Can we have a look?


Kind regards,
Robin
# 5  
Old 07-11-2017
WHAT exactly is going wrong? I see the variable is matched and grep returns en exit code of 0 (= success).
# 6  
Old 07-12-2017
Hi Rudi - The problem is that the word I am grepping for, doesnt exist in the file - It is returning 0 when it should actually return 1. From command line it works as expected, but when put into the script it returns with 0.

Below is the code that is being used - Because $TRIM_FILENAME does not exist in $Valid_List, it should not sent the file, but it is.

Code:
 
 TRIM_FILENAME=`echo $FILENAME | sed 's,_.._$DATE,,g'`
grep -E "^${TRIM_FILENAME}$" $REFERENCE/$Valid_List
         if [ $retcode = 0 ]
        then
                echo -e "$FILENAME needs to be sent "
 
                hadoop fs -cp $line $OUTPUT_DIR
                echo "successfully sent"
        else
                echo -e "$FILENAME does not need to be sent\n"
                exit 8
        fi

# 7  
Old 07-12-2017
You certainly want another variable substitution, and the fix is another time double quotes: sed "s,_.._$DATE,,g"
Also it is a good idea to put double quotes around all variables, in order to allow their substitution but not additional expansions. Together with some more suggestions:
Code:
TRIM_FILENAME=`echo "$FILENAME" | sed "s,_.._$DATE,,"`
grep -E "^${TRIM_FILENAME}$" "$REFERENCE/$Valid_List"
        if [ $? -eq 0 ] # exit status of the previous command
        then
                printf "%s\n" "$FILENAME needs to be sent"
 
                hadoop fs -cp "$line" "$OUTPUT_DIR"
                echo "successfully sent"
        else
                printf "%s\n\n" "$FILENAME does not need to be sent"
                exit 8
        fi

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Grep exact match

Hello! I have 2 files named tacs.tmp and tacDB.txt tacs.tmp looks like this 0 10235647 102700 106800 107200 1105700 tacDB.txt looks like this 100100,Mitsubishi,G410,Handheld,,0,0,0 100200,Siemens,A53,Handheld,,0,0,0 100300,Sony Ericsson,TBD (AAB-1880030-BV),Handheld,,0,0,0... (2 Replies)
Discussion started by: Cludgie
2 Replies

2. Shell Programming and Scripting

Grep or sed - printing line only with exact match

Hello. In my script, some command return : q | kernel-default | package | 3.19.0-1.1.g8a7d5f9 | x86_64 | openSUSE-13.2-Kernel_stable_standard | kernel-default | package | 3.19.0-1.1.g8a7d5f9 | i586 | openSUSE-13.2-Kernel_stable_standard | kernel-default ... (3 Replies)
Discussion started by: jcdole
3 Replies

3. Shell Programming and Scripting

Grep multiple exact match, do not display lines

Hi, Need help to grep the following from a file x. I just want to grep exact match not lines and not partial word. CONFSUCCESS CONFFAIL CONFPARTIALSUCCESS >cat x xczxczxczc zczczcxx CONFSUCCESS czczczcczc czxxczxzxczcczc CONFFAIL xczxczcxcczczc zczczczcz CONFPARTIALSUCCESS czczxcxzc ... (4 Replies)
Discussion started by: rajeshwebspere
4 Replies

4. Shell Programming and Scripting

Searching for exact match using grep

I am searching for an exact match on a value read from another file to lookup an email address in another file. The file being checked is called "contacts" and it has Act #, email address, and contact person. 1693;abc1693@yahoo.comt;Tommy D 6423;abc6423@yahoo.comt;Jim Doran... (2 Replies)
Discussion started by: ziggy6
2 Replies

5. Shell Programming and Scripting

Grep two words with exact match

HI Input : Counters Counter Int Ints Counters Counters Ints Ints I want to grep Counter|Int Output : Counter (1 Reply)
Discussion started by: pareshkp
1 Replies

6. Shell Programming and Scripting

grep and sed exact match questions

This post was previously mistaken for homework, but is actually a small piece of what I working on at work. Please answer if you can. QUESTION1 How do you grep only an exact string. I am using Solaris10 and do not have any GNU products installed. Contents of car.txt CAR1_KEY0 CAR1_KEY1... (2 Replies)
Discussion started by: thibodc
2 Replies

7. UNIX for Dummies Questions & Answers

grep and sed exact match questions

This was mistaken as homework in a different forum, but is not. These are questions that are close to what I am trying to do at work. QUESTION1: How do you grep only an exact string. I am using Solaris10 and do not have any GNU products installed. Contents of car.txt CAR1_KEY0 CAR1_KEY1... (1 Reply)
Discussion started by: thibodc
1 Replies

8. Solaris

grep exact match

Hi This time I'm trying to grep for an exact match e.g cat.dog.horse.cow.bird.pig horse.dog.pig pig.cat.horse.dog horse dog dog pig.dog pig.dog.bird how do I grep for dog only so that a wc -l would result 2 in above case. Thanks in advance ---------- Post updated at 06:33 AM... (4 Replies)
Discussion started by: rob171171
4 Replies

9. Shell Programming and Scripting

Using grep returns partial matches, I need to get an exact match or nothing

I’m trying to modify someone perl script to fix a bug. The piece of code checks that the zone name you want to add is unique. However, when the code runs, it finds a partial match using grep, and decides it already exists, so the “create” command exits. $cstatus = `${ZADM} list -vic | grep... (3 Replies)
Discussion started by: TKD
3 Replies

10. UNIX for Advanced & Expert Users

Exact Match thru grep ?????

hey..... i do have text where the contents are like as follows, FILE_TYPE_NUM_01=FILE_TYPE=01|FILE_DESC=Periodic|FILE_SCHDL_TYPE=Daily|FILE_SCHDL=|FILE_SCHDL_TIME=9:00am|RESULTS=B FILE_TYPE_NUM_02=FILE_TYPE=02|FILE_DESC=NCTO|FILE_SCHDL_TYPE=Daily|FILE_SCHDL=|FILE_SCHDL_TIME=9:00am|RESULTS=M... (2 Replies)
Discussion started by: manas_ranjan
2 Replies
Login or Register to Ask a Question