Strange result


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Strange result
# 1  
Old 04-23-2013
Strange result

Hi,

I have following codes which looks ok:

Code:
$ string1="123456789 abc2"
$ string2="abc"
$ position_of_string2=`expr index "$string1" "$string2"`
$ echo $position_of_string2
$
11

however, when string2="abc2", it gives me the following result:

Code:
$ string1="123456789 abc2"
$ string2="abc2"
$ position_of_string2=`expr index "$string1" "$string2"`
$ echo $position_of_string2
$
2

It seems the program searches ANY part of string2 (instead of the whole string2) and returns the position if finds first.

How can I find the position of a WHOLE substring within a string?

Last edited by littlewenwen; 04-23-2013 at 01:23 PM..
# 2  
Old 04-23-2013
From man expr:

Code:
       index STRING CHARS
              index in STRING where any CHARS is found, or 0

I don't think expr can do that.

You can do that with replacement and some arithmetic:

Code:
# Strip everything up to and including string2 from front of string1
string3="${string1##*${string2}}"

if [ "${#string3}" -eq "${#string1}" ]
then
        echo "${string2} not found in ${string1}"
else
        # Remaining length of string3 is length of string1 - (offset+length of string2)
        echo "offset is $(( 1+(${#string1}-${#string3})-${#string2}))"
fi

This User Gave Thanks to Corona688 For This Post:
# 3  
Old 04-23-2013
Playing around a bit to show some things

Code:
$ string1="123456789 abc2"

$ echo $string1
123456789 abc2

$ echo $string1 | awk -v v1="abc2" '{print $0,"___",v1,"___",index($0,v1)}'
123456789 abc2 ___ abc2 ___ 11

set your string to a variable
echo to screen, so you can see
echo string, also set a variable v1, print initial variable (note $0 as $1 would separate at the space character), show underline, print my search string, show another underline, finally display the location of the substring
You obviously don't need all that display, but wanted to show the logic behind the approach.
# 4  
Old 04-23-2013
Thank you very much for help.

Corona688, could you explain a bit more about string3,

Code:
string3="${string1##*${string2}}"

what does the ##* do here? where can I find an introduction of their use? thanks a lot.
# 5  
Old 04-23-2013
See Advanced Bash Scripting Guide -- String Operations

It matches the longest match of "*abc2" from the start of the string, and replaces it with nothing, so you end up with a blank string, "".

If it wasn't at the end, if you were matching against "123456789 abc2 qwerty", you'd end up with " qwerty".

You can do math on the resulting string lengths to figure out where, or if, the string was found. If it wasn't found, the resulting string would be identical.
This User Gave Thanks to Corona688 For This Post:
# 6  
Old 04-23-2013
Thank you very much for spending time helping me.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to compare the current result with previous line result.?

Hi Gurus, I have requirement to compare current result with previous reuslt. The sample case is below. 1 job1 1 1 job2 2 1 job3 3 2 job_a1 1 2 job_a2 2 2 job_a3 3 3 job_b1 1 3 job_b2 2 for above sample file, GID is group ID, for input line, the job run... (1 Reply)
Discussion started by: ken6503
1 Replies

2. UNIX for Dummies Questions & Answers

Strange result using find command.

I created a file with the permissions of 776. When I ran the command find /root/Desktop -perm -644 -type f The created file shows up as part of the results. Doesn't -perm -mode mean that for global, only 4(read) and 2(write) can be accepted ? (2 Replies)
Discussion started by: Hijanoqu
2 Replies

3. Shell Programming and Scripting

Strange result of eval, how does eval really work with ssh?

Hi all, some small script with eval turned me to crazy. my OS is linux Linux s10-1310 2.6.16.53-0.8.PTF.434477.3.TDC.0-smp #1 SMP Fri Aug 31 06:07:27 PDT 2007 x86_64 x86_64 x86_64 GNU/Linux below script works well #!/bin/bash eval ssh remotehost date eval ssh remotehost ls below... (1 Reply)
Discussion started by: summer_cherry
1 Replies

4. Shell Programming and Scripting

Strange variable comparison result in awk

So, I'm making a little awk script that generates a range-based histogram of a set of numbers. I've stumbled onto a strange thing. Toward the end of the process, I have this test: if ( bindex < s ) "bindex" is the "index" of my "bin" (the array element that gets incremented whenever a... (2 Replies)
Discussion started by: treesloth
2 Replies

5. Shell Programming and Scripting

awk printing: strange result

Dear all, I am using awk in a bash script to extract a list of x y z coordinates from a file such as: %BEGIN 3D-SPACE COORDINATES 0.2085627338147950 0.2471306816410478 0.2085627338147950 0.1242549179185660 0.2755539793525220 0.4147884486606120 0.2030669560265720 ... (6 Replies)
Discussion started by: pauli
6 Replies

6. Shell Programming and Scripting

strange output

I had a similar script in solaris and it had no problem. I wrote this one in freeBSD and it gave me strange output. Can anyone please tell me why? thanks a lot #!/bin/sh #This is a shell script that checks file system capacity mounted on /home directory #If file system is over 90% capacity,... (1 Reply)
Discussion started by: k2k
1 Replies

7. UNIX for Dummies Questions & Answers

display the result of wc -l with words before and after the result

hello showrev -p | wc -l returns: 381 What to do in case I want to have this output: number of lines returned by showrev -p is: 381 thx (3 Replies)
Discussion started by: melanie_pfefer
3 Replies

8. Shell Programming and Scripting

Outputting formatted Result log file from old 30000 lines result log<help required>

Well I have a 3000 lines result log file that contains all the machine data when it does the testing... It has 3 different section that i am intrsted in 1) starting with "20071126 11:11:11 Machine Header 1" 1000 lines... "End machine header 1" 2) starting with "20071126 12:12:12 Machine... (5 Replies)
Discussion started by: vikas.iet
5 Replies

9. Solaris

Something strange...

Hi all, Thanks for any replies and for reading in advance. We have upgraded one of our database instances to 10g on a Solaris 8 box, anyhow the other day it started trying to ping loads of weird IP addresses that we don't use, since our systems all run on pretty similar IP's. It all behind... (0 Replies)
Discussion started by: B14speedfreak
0 Replies

10. UNIX for Dummies Questions & Answers

strange

Hi All I am doing a locate <file_name> on my Redhat 7 System. I am unable to get the output. All the keep getting is: locate: this is not a vlaid slocate database: /var/lib/locate/slocate.db What des this mean? Is my system compromised? Thanks in advance. KS (13 Replies)
Discussion started by: skotapal
13 Replies
Login or Register to Ask a Question