2015-12-26 70 views
2

假設我有以下字符串:在UNIX中,如何找到長字符串中的單個單詞?

mystring="something something something schwifty3 something" 

現在我知道那裏有一個schwifty與後一個數字,但我想從這個字符串一切排除整個單詞。

grep -o似乎無法正常工作,或者由於某種原因,甚至是可用的選項......任何想法?

回答

3

對於純殼方法,將具有前綴(#)和後綴(%)除去字符串替換將工作:

mystring="something something something schwifty3 something" 

s=schwifty 

case $mystring in 
(*$s*) 
    a="$s${mystring#*$s}" 
    echo ${a%% *} 
esac 

這將顯示任意字符串的第一次出現在$mystring開始$s。假設:只將字符串拆分爲ASCII空間。

純shell方法意味着我們只使用shell內建的和機制,不需要外部命令。

4

將空格轉換爲換行符,以便grep只返回單個單詞。

mystring="something something something schwifty3 something" 
echo "$mystring" | tr " " '\n' | grep "schwifty" 
+0

我會永遠使用它。謝謝,這是完美的! – driedupsharpie

1

-w對字的grep

echo sth sth something sth1|sed 's/ /\n/g'|grep -w sth 
sth 
sth 
3

什麼

grep -Po "schwifty\d" <<< $mystring 

或者這是否有可能不止一個數字串中:

grep -Po "schwifty\d+" <<< $mystring 
0
$ echo $mystring 
something something something schwifty3 something 

$ echo $mystring | sed -n 's/.*\s*\(schwifty[0-9]\)\s*.*/\1/p' 
schwifty3 

$ echo $mystring | sed -n 's/.*\s*\(schwifty\)[0-9]\s*.*/\1/p' 
schwifty 
0

你也可以在bash中做到這一點。

a=" $mystring "  # pad with spaces (in-case the word is first or last) 
a="${a#* schwifty}" # chop all before and including schwifty 
a="schwifty${a%% *}" # restore schwifty chop all after first word, 
echo "$a" 
相關問題