假设我有以下字符串:
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);
}
似乎不起作用,甚至不是一个可用的选项...任何想法?
答案 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"