在UNIX中,如何在长字符串中找到单个单词?

时间:2015-12-26 21:54:55

标签: string unix awk grep word

假设我有以下字符串:

schwifty

现在我知道有一个grep -o后面有一个数字,但是我希望这个字符串中的所有单词都被排除在外。

由于某种原因,

* { margin: 0; padding: 0; } .box { height: 100vh; transition: background .25s ease; } .box:hover { background: #f00; } .modal { position: absolute; top: 50%; left: 50%; max-width: 50%; transform: translate(-50%, -50%); border: 1px solid grey; background: plum; box-shadow: 0 0 0 9999px rgba(0, 0, 0, 0.5); }似乎不起作用,甚至不是一个可用的选项...任何想法?

6 个答案:

答案 0 :(得分:4)

将空格转换为换行符,以便grep只返回单个单词。

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

答案 1 :(得分:3)

对于纯shell方法,使用前缀(#)和后缀(%)删除的字符串替换将起作用:

mystring="something something something schwifty3 something"

s=schwifty

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

这将显示$s中以$mystring开头的任何字符串的第一次出现。假设:您只将字符串拆分为ascii空格。

纯shell方法意味着我们只使用shell内置函数和机制,没有外部命令。

答案 2 :(得分:3)

怎么样?
grep -Po "schwifty\d" <<< $mystring

或者如果字符串中可能有多个数字:

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

答案 3 :(得分:1)

-w for grep中的单词

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

答案 4 :(得分: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

答案 5 :(得分: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"