我编写了以下语法(我的ksh脚本的一部分)来检查LINE=star的第一个单词和第二个单词是否为car
[[ ` echo $LINE | awk '{print $1}' ` = star ]] && [[ ` echo $LINE | awk '{print $2}' ` = car ]] && print "match"我需要其他简单,智能和更短的解决方案,而不是我的语法。从awk、perl或sed(如果可以只使用echo一次或更好,如果我们不能使用echo,因为我需要最大限度地节省时间),我能得到一些想法吗?
发布于 2010-08-25 15:35:55
实际上,您不需要调用任何外部工具
set -f
set -- $LINE
case "$1 $2" in
"star car")
echo "match";;
esac发布于 2010-08-25 15:28:39
您根本不需要外部进程:
[[ $LINE == *([ ])star+([ ])car?([ ]*) ]]如果您有时还需要提取第一个单词(警告,直接在浏览器中键入):
LINE=${LINE##+[ ]} # strip leading spaces
first_word=${LINE%%[ ]*}
if [[ $LINE = *[ ]* ]]; then
LINE_minus_first_word=${LINE##*+([ ])}
else
LINE_minus_first_word=''
fi如果括号可能出现在$LINE中,请在括号内添加选项卡。
发布于 2010-08-25 22:11:49
set -o noglob
words=($LINE)
[[ "${words[0]} ${words[1]}" == "star car" ]] && print "match"编辑:
使用ksh和Bash的正则表达式匹配(Bash >=版本3.2):
pattern='^[[:blank:]]*star[[:blank:]]+car([[:blank:]]+|$)'
[[ $LINE =~ $pattern ]] && print "match"https://stackoverflow.com/questions/3563349
复制相似问题