Grep behaves diffrent upon printf or echo output


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Grep behaves diffrent upon printf or echo output
# 1  
Old 10-13-2014
Grep behaves diffrent upon printf or echo output

Hello

I want to check whether certain arguments were passed to the script, and when those are, not doing a log entry.
If those arguments are not passed, always do a log entry (*new call*).

What currently i have is this:
Code:
	echo "${@}"|grep -q \\-[Lih] || \
		tui-log -e "$LOG" "\r---- New call $$ ----"

Which upon these 2 commands, produces these lines within the logfiles:
Code:
vhs -h ; vhs -L

With echo i have the expected output:
Code:
21:42:46         Show Help
21:42:46         Show Logfile
21:42:49         Show Help
21:42:49         Show Logfile

However, as soon i change echo to become printf, it produces this (not wanted):
Code:
---- New call 17388 ----
21:44:19         Show Help

---- New call 17423 ----
21:44:19         Show Logfile

In addition i wanted to use [[:space:]]\\-[Lih], but i assume that is another issue?
I've tried quoting the regex, but still fails.

System:
Code:
export LC_ALL=C ; uname -r ; echo "--" ; $SHELL --version
3.16.3-200.fc20.x86_64
--
GNU bash, version 4.2.51(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Any ideas?
Thank you in advance
# 2  
Old 10-13-2014
You only care if 1 of those 3 options are passed? And how did you use printf?

Code:
$ echo "$@"
one two three
$ printf "$@"
one$

Clearly the printf statement needs to be different. This will give the same string:
Code:
$ printf '%s\n' "$*"
one two three

But keeping the idea of using printf and grep, perhaps you want:

Code:
$ echo "$@"
-L -i
$ printf '%s\n' "$@" | grep -c -- -[Lih]
2

Now we know we had 2 of the 3 options...
This User Gave Thanks to neutronscott For This Post:
# 3  
Old 10-13-2014
Quote:
Originally Posted by neutronscott
... ... ...

But keeping the idea of using printf and grep, perhaps you want:

Code:
$ echo "$@"
-L -i
$ printf '%s\n' "$@" | grep -c -- -[Lih]
2

Now we know we had 2 of the 3 options...
Although the filenames -L -i, and -h are not common, scripts should always assume that they might be present. Therefore, the grep -[Lih] operand should be quoted:
Code:
$ printf '%s\n' "$@" | grep -c -- '-[Lih]'

This User Gave Thanks to Don Cragun For This Post:
# 4  
Old 10-13-2014
Thanks Don (and Neutron too), that thought was actualy in mind, but only as part of a filename.
That just solved my 2nd question, i still was fiddling around, me used the wrong quotes Smilie

EDIT:
Weird, the solved tag didnt put a [solved] prior to the threads title..

Last edited by sea; 10-13-2014 at 10:43 PM..
# 5  
Old 10-14-2014
Quote:
Originally Posted by sea
Thanks Don (and Neutron too), that thought was actualy in mind, but only as part of a filename.
That just solved my 2nd question, i still was fiddling around, me used the wrong quotes Smilie

EDIT:
Weird, the solved tag didnt put a [solved] prior to the threads title..
You can search on tags like solved, but they don't change the title of your thread. The solved tag is special in that it also has the side-effect of changing the color used when displaying the title of the thread from black to blue.
This User Gave Thanks to Don Cragun For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Grep echo awk print all output on one line

Hello, I've been trying to find the answer to this with Google and trying to browse the forums, but I haven't been able to come up with anything. If this has already been answered, please link me to the thread as I can't find it. I've been asked to write a script that pulls a list of our CPE... (51 Replies)
Discussion started by: rwalker
51 Replies

2. Shell Programming and Scripting

Copy-pasted code behaves diffrent

Heyas I'm currently attempting to apply the code of tui-select to tui-list. That is because tui-list simply made a 1 string list, while tui-select uses dynamicly up to 3 strings per line. Anyway, so i copy pasted the code, and just made the changes marked with red.... Know that both scripts... (2 Replies)
Discussion started by: sea
2 Replies

3. Linux

Availability: echo vs. printf?

Hello, For some reason i dont remember, i currently believe (but beeing unsure) that printf is available on more diffrent systems (unix, bsd, linux, ??) than echo is. Could someone please enlighten me, whether this is true or not? Thank you PS: I just found pages about the diffrences of... (3 Replies)
Discussion started by: sea
3 Replies

4. Shell Programming and Scripting

Managing output... echo or printf?

Hello script guru's as i write more and more code i always block at managing output... either writing to standard out, writing to files via std out (log, temp file, etc). Don't get me wrong 99% of the time it DOES the job but maybe there is more efficient. I'm writing a small script to... (2 Replies)
Discussion started by: maverick72
2 Replies

5. Solaris

Diffrent output in cron jobs

Hi, I have issue with cron. When i run script manually output is fine but when i add it to cron output file is not as same. both file attach some junk charecter comming in cron output. thanx Jignesh (5 Replies)
Discussion started by: jkmistry
5 Replies

6. Shell Programming and Scripting

printf/echo in a second script

This may be little confusing. I have Script1, which pulls data from the system and creates another script(lets say script2). While I run script1 I need to add printf/echo statements for script2, so that when I run script2 I see those statement. eg: script1 765 printf " display frame-$1 timeoffset... (2 Replies)
Discussion started by: miltonrods
2 Replies

7. Shell Programming and Scripting

\n in ksh using echo & printf

#!/usr/bin/ksh var1="Hi World" var2="Morning" var3=$(echo "$var1" \n "$var2") echo $var3 var3=$(printf "$var1 \n $var2") echo $var3 Output Any way to get in my $var3 ? (7 Replies)
Discussion started by: dahlia84
7 Replies

8. Shell Programming and Scripting

advanced echo/printf

I want to print a colored line using bash. I want to print: Smtp status where "Smtp status" will be in yellow and will be in green. Thanks. (2 Replies)
Discussion started by: proactiveaditya
2 Replies

9. UNIX for Dummies Questions & Answers

How do I output or echo NONE if grep does not find anything?

I am performing a grep command and I need to know how to echo "NONE" or "0" to my file if grep does not find what i am looking for. echo What i found >> My_File grep "SOMETHING" >> My_File I am sure this is easy, I am sort of new at this! Thanks (2 Replies)
Discussion started by: jojojmac5
2 Replies

10. Shell Programming and Scripting

diffrent results between command line and scripted grep

When I type a command at the command line it supplies one result and the exact same command in a script egrep '^01|^02|^03|^04' file > fileout count = 29353 same count in the script yields a count of 23492 is there any reason this could be happening. (1 Reply)
Discussion started by: r1500
1 Replies
Login or Register to Ask a Question