假設我有以下字符串:在UNIX中,如何找到長字符串中的單個單詞?
mystring="something something something schwifty3 something"
現在我知道那裏有一個schwifty
與後一個數字,但我想從這個字符串一切排除整個單詞。
grep -o
似乎無法正常工作,或者由於某種原因,甚至是可用的選項......任何想法?
假設我有以下字符串:在UNIX中,如何找到長字符串中的單個單詞?
mystring="something something something schwifty3 something"
現在我知道那裏有一個schwifty
與後一個數字,但我想從這個字符串一切排除整個單詞。
grep -o
似乎無法正常工作,或者由於某種原因,甚至是可用的選項......任何想法?
對於純殼方法,將具有前綴(#)和後綴(%)除去字符串替換將工作:
mystring="something something something schwifty3 something"
s=schwifty
case $mystring in
(*$s*)
a="$s${mystring#*$s}"
echo ${a%% *}
esac
這將顯示任意字符串的第一次出現在$mystring
開始$s
。假設:只將字符串拆分爲ASCII空間。
純shell方法意味着我們只使用shell內建的和機制,不需要外部命令。
將空格轉換爲換行符,以便grep只返回單個單詞。
mystring="something something something schwifty3 something"
echo "$mystring" | tr " " '\n' | grep "schwifty"
-w對字的grep
echo sth sth something sth1|sed 's/ /\n/g'|grep -w sth
sth
sth
什麼
grep -Po "schwifty\d" <<< $mystring
或者這是否有可能不止一個數字串中:
grep -Po "schwifty\d+" <<< $mystring
$ 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
你也可以在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"
我會永遠使用它。謝謝,這是完美的! – driedupsharpie