2011-02-17 99 views
32

如果我有一個shell變量的文字,說$a使用Linux shell腳本的字符串在字符串中的位置?

a="The cat sat on the mat" 

我如何可以搜索「貓」和使用Linux shell腳本返回4,或者-1,如果沒有發現?

+0

可能重複(http://stackoverflow.com/questions/229551/string-contains在這個問題 – 2011-02-17 16:39:56

+5

@丹尼爾這個問題也要求索引的子串 – 2011-02-17 16:41:58

回答

5
echo $a | grep -bo cat | sed 's/:.*$//' 
+0

只有回聲「$ a」工作時,我試過這 – Zubair 2011-02-17 16:46:52

+0

回聲「貓」| grep -bo cat | sed's /:.*$//' does not work – Zubair 2011-03-17 11:17:45

+2

@Zubair - 你的命令在我的Ubuntu 10.04盒子上顯示「4」。這就是我所期望的。 – qbert220 2011-03-17 11:26:11

6

我以前awk這個

a="The cat sat on the mat" 
test="cat" 
awk -v a="$a" -v b="$test" 'BEGIN{print index(a,b)}' 
20

您可以使用grep來獲得字節偏移的字符串相匹配的部分組成:

echo $str | grep -b -o str 

按照您的例子:

[[email protected] ~]$ echo "The cat sat on the mat" | grep -b -o cat 
4:cat 

你可以管t帽子的awk如果你只是想在第一部分

echo $str | grep -b -o str | awk 'BEGIN {FS=":"}{print $1}' 
48

使用bash

a="The cat sat on the mat" 
b=cat 
strindex() { 
    x="${1%%$2*}" 
    [[ "$x" = "$1" ]] && echo -1 || echo "${#x}" 
} 
strindex "$a" "$b" # prints 4 
strindex "$a" foo # prints -1 
的[字符串在bash含有]