首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ksh +智能测试线解决方案

ksh +智能测试线解决方案
EN

Stack Overflow用户
提问于 2010-08-25 14:29:43
回答 4查看 196关注 0票数 1

我编写了以下语法(我的ksh脚本的一部分)来检查LINE=star的第一个单词和第二个单词是否为car

代码语言:javascript
复制
     [[ ` echo $LINE | awk '{print $1}' ` = star  ]] && [[  ` echo $LINE | awk '{print $2}' ` = car  ]] && print "match"

我需要其他简单,智能和更短的解决方案,而不是我的语法。从awk、perl或sed(如果可以只使用echo一次或更好,如果我们不能使用echo,因为我需要最大限度地节省时间),我能得到一些想法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-25 15:35:55

实际上,您不需要调用任何外部工具

代码语言:javascript
复制
set -f 
set -- $LINE
case "$1 $2" in 
 "star car") 
    echo "match";;
esac
票数 1
EN

Stack Overflow用户

发布于 2010-08-25 15:28:39

您根本不需要外部进程:

代码语言:javascript
复制
[[ $LINE == *([ ])star+([ ])car?([ ]*) ]]

如果您有时还需要提取第一个单词(警告,直接在浏览器中键入):

代码语言:javascript
复制
LINE=${LINE##+[ ]}  # strip leading spaces
first_word=${LINE%%[ ]*}
if [[ $LINE = *[ ]* ]]; then
  LINE_minus_first_word=${LINE##*+([ ])}
else
  LINE_minus_first_word=''
fi

如果括号可能出现在$LINE中,请在括号内添加选项卡。

票数 1
EN

Stack Overflow用户

发布于 2010-08-25 22:11:49

代码语言:javascript
复制
set -o noglob
words=($LINE)
[[ "${words[0]} ${words[1]}" == "star car" ]] && print "match"

编辑:

使用ksh和Bash的正则表达式匹配(Bash >=版本3.2):

代码语言:javascript
复制
pattern='^[[:blank:]]*star[[:blank:]]+car([[:blank:]]+|$)'
[[ $LINE =~ $pattern ]] && print "match"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3563349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档