Grep command is not working


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Grep command is not working
# 1  
Old 11-06-2017
Grep command is not working

I have made a program that reads a text file and checks for palindromic words and then outputs them. They each appear on a new line with a count of the number of occurences beside each of the words.

Requirements for being classed as palindrome are that the word must have at least 3 letters and at least 2 of them must be different. For example, eee would not be a palindrome but eye would be.

I am having a problem in that my program is picking up some of the words such as eee and iii. I have added the grep command highlighted below to try and fix this but I keep coming up against these errors. I cannot seem to get it to work.



Code:
./palindrome: line 5: syntax error near unexpected token `|'
./palindrome: line 5: `    | grep -P -v '^(.)\1*$''

or

Code:
usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]]
	[-e pattern] [-f file] [--binary-files=value] [--color=when]
	[--context[=num]] [--directories=action] [--label] [--line-buffered]
	[--null] [pattern] [file ...]


Code:
#!/bin/bash
preprocess() {
  tr -d '[[:punct:][:digit:]@]' \
    | tr '[[:space:]]' '\n' \ 
    | grep -P -v '^(.)\1*$'
}

paste <(preprocess <"$1") <(preprocess <"$1" | rev) \
  | awk '$1 == $2 && (length($1) >= 3) { print $1 }' \
  | sort | uniq -c


Last edited by Don Cragun; 11-06-2017 at 09:17 AM.. Reason: Add missing CODE tags and change ICODE tags to CODE tags.
# 2  
Old 11-06-2017
Is this school work?

Can you explain the real-life application for this script? While posted in a general area, this appears similar to a school project or homework assignment. If it is a school/homework assignment, please repost in that section.
# 3  
Old 11-06-2017
There's no real life application for the script. I am simply trying to learn bash shell scripts and this is an exercise to help learn.
# 4  
Old 11-06-2017
From the error message you're getting from grep, one might guess that you're using a macOS or BSD operating system, but I don't see why you would get a syntax error on line 5 from bash with this code on those systems.

One might also guess that you copied this code from someone who was using a different operating system that has a grep utility that has a -P option. (The 2nd error message you're getting says that the grep utility you're using does not have a -P option.)

So, where did you get this code and what operating system was being used by the person who wrote this code? And, what operating system and shell are you using?

If you change the grep to get rid of the unknown option and convert the RE being used to be one that would be accepted by any standard version of grep:
Code:
grep -v '^\(.\)\1*$'

you have a grep command that will delete lines where every character in a word is the same character and there are at least two characters in the word.

Making the huge assumption that the shell you're using understands the <(command) syntax in addition to standard shell file redirections, your script with the above modification seems to do what you want.
# 5  
Old 11-06-2017
I am using mac osx.
The person I got the code was using ubuntu.
I am using the mac terminal for this script.
# 6  
Old 11-06-2017
Quote:
Originally Posted by greenhouse91
I am using mac osx.
The person I got the code was using ubuntu.
I am using the mac terminal for this script.
OK.

So, if you replace the line in your code:
Code:
    | grep -P -v '^(.)\1*$'

with:
Code:
    | grep -v '^\(.\)\1*$'

does your script do what you wanted it to do?
# 7  
Old 11-06-2017
No it doesn't.
It comes up with this error message.

Code:
./palindrome ulysses.txt
./palindrome: line 19: syntax error: unexpected end of file

Moderator's Comments:
Mod Comment Please use CODE tags (not ICODE tags) for full line and multi-line sample input, output, and code segments.

Last edited by Don Cragun; 11-06-2017 at 03:00 PM.. Reason: Change ICODE tags to CODE tags.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Fdisk and grep command not working in udev trigger

Hi Guys, Can someone take a look at my scripts what missing, plugin usb drive the script is running can log all my echo but cannot execute command. Is there any configuration in linux or to my scripts need to add?. What i want to achieve is every time I plugin the usbdisk automatic mount to... (21 Replies)
Discussion started by: lxdorney
21 Replies

2. Shell Programming and Scripting

Grep not working on mac

Hi all, I got a new mac and can't get grep, awk etc to work. I tried the following command: grep DICER test.txt output: AGOER text.txt looks like this: DICER DICER AGOWhat is wrong? Please use code tags (23 Replies)
Discussion started by: Palgrave
23 Replies

3. Shell Programming and Scripting

-v and -f option for grep not working

In solaris, i m trying to find the files having a particulat extension and then from the list i want to exclude those files which is present in a file. But it seems the -f and -v option are not working find $source -type f -name $extn | /usr/xpg4/bin/grep -F -v -f $exclude | while read... (7 Replies)
Discussion started by: millan
7 Replies

4. Shell Programming and Scripting

Working with grep and Bash

Hi, I am currently working on a Bash shell script that - Downloads a webpage, in this case youtube.com - Extracts Number of views, Extracts Title of video, Extracts User who made it, and lastly Duration. Then I have to Out put this into columns. To me this sounds like crazyness. I'm very new... (6 Replies)
Discussion started by: Njzangel
6 Replies

5. Shell Programming and Scripting

Working with grep-output

Hi, 1st post Sorry for borrowing the thread. Hopefully this is doable. I need to write a script where I need to pick information from my grep-results. grep -n "s_" file | head -n 1 Output is like this: 6:s_9: 11-664 Fam_g442_99 So this gives me the first line of the file which... (2 Replies)
Discussion started by: Shell_y
2 Replies

6. Programming

Grep not working of jobs

I am using csh. Output of command jobs {145}>jobs + Running /home/alokg/nedit-5.5-Linux-x86/nedit .cshrc Running /home/alokg/nedit-5.5-Linux-x86/nedit build/irun_usb2.log Running /home/alokg/nedit-5.5-Linux-x86/nedit... (3 Replies)
Discussion started by: alokgarg79
3 Replies

7. UNIX for Dummies Questions & Answers

grep -f not working

Hello, I'm going crazy about this. I'm using grep to filter some values as in pas -ef | grep asterisk. When I use the same with -f somefile something weird happens, if somefile is created with vi it'll work, if somefile is created with vi but values are pasted from an Excell file it will not work.... (2 Replies)
Discussion started by: seveman
2 Replies

8. Shell Programming and Scripting

grep not working ????

Hi, I've prob in doing grep. I want to grep line staring with number 531250 in the 1st column from a file (example in picture attached below) using command grep -w "531250" file my ideal result should be 531250 1 21 42.1 100 1e-05 ... (8 Replies)
Discussion started by: masterpiece
8 Replies

9. UNIX for Dummies Questions & Answers

grep not working

This condition is not able to grep , can any one tell what's wrong with this part. I am able to see from unix command but not with host script. echo "Checking for Loader Status " >> $REPFILE if test $? = 0 then echo "Successful termination of SQL*Loader "$LOADER1 >>... (5 Replies)
Discussion started by: u263066
5 Replies

10. Shell Programming and Scripting

Grep command is not working when put into cron

Hi, I worte a script which runs perfect when i execute it manually. But when i scheduled into cron the grep command alone is not working. the sample script, /usr/bin/grep FTP $subfile > /tmp/tfsrec.dat tfs=`echo $?` if then echo "FTP FOUND" else echo "FTP NOT FOUND" Where... (5 Replies)
Discussion started by: thiru_cs
5 Replies
Login or Register to Ask a Question