首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找并匹配shell中的模式

查找并匹配shell中的模式
EN

Stack Overflow用户
提问于 2016-01-17 17:46:49
回答 1查看 26关注 0票数 0

下面的代码运行在远程服务器上:

代码语言:javascript
复制
z=`echo $r| sed 's/\\$//g'`
server=`echo $z | awk '{print tolower($0)".outsourcing.com"}'`

在这里,如果我将$r值作为' scale‘传递,我希望我的server变量将标度查找为'- scale’,这意味着如果server变量找到任何后缀或缩尺前缀,它应该会给出输出。假设我将刻度传递给$r,并且它找到了primary-scale.outsourcing.com,它应该给出输出如下:

代码语言:javascript
复制
echo $server 

primary-scale.outsorcing.com

此外,这一条件应只适用于规模。这意味着如果我在$r变量中传递任何其他字符串,它不应该影响我的上述现有代码。请帮我放这里。

EN

回答 1

Stack Overflow用户

发布于 2016-01-17 17:54:48

代码语言:javascript
复制
# translate to lower-case earlier, not later
r=$(printf '%s\n' "$r" | tr '[:upper:]' '[:lower:]')

# substitute scale with -scale, leave other values alone
[ "$r" = "scale" ] && r="-scale"

# original, unmodified code
z=`echo $r| sed 's/\\$//g'`
server="$z.outsourcing.com"

话虽如此,我可能会考虑改变这一点:

代码语言:javascript
复制
#!/bin/bash
#      ^^ must be bash shebang; must be bash 4.0 or newer for built-in lowercase PE

r=${r,,} # make value lower-case, for bash 4.0+
# for older shells: use z=$(printf '%s' "$z" | tr '[:upper:]' '[:lower:]') instead of above

[[ $r = scale ]] && r=-scale
z=${r//"$"/}

server="$z.outsourcing.com"

由于新代码不包含对外部工具(awk、sed等)的调用,它将运行得更快。

最后--如果您的实际意思是查找以手边的值作为前缀或后缀的文件(最后以outsourcing.com结尾),那么您的server=行是错误的,我将该行翻译成现代语法也是错误的。相反,可以考虑如下:

代码语言:javascript
复制
set -- *"$z"*.outsourcing.com
for server; do
  [ -e "$server" ] && echo "$server"
done
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34841520

复制
相关文章

相似问题

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