首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在KSH中使用正则表达式设置另一个变量

在KSH中使用正则表达式设置另一个变量
EN

Stack Overflow用户
提问于 2010-10-01 02:48:15
回答 3查看 960关注 0票数 2

我有一个Korn shell脚本,我想根据另一个变量和regex更改一个变量。

我想要的是生成一个如下所示的变量值,但不调用sed:

代码语言:javascript
复制
$ echo 'orl,bdl,lap' | sed "s/,*orl//" | sed "s/^,*//"   
bdl,lap  
$ echo 'orl,bdl,lap' | sed "s/,*bdl//" | sed "s/^,*//"  
orl,lap  
$ echo 'orl,bdl,lap' | sed "s/,*lap//" | sed "s/^,*//"  
orl,bdl    

我尝试过不同版本的

代码语言:javascript
复制
export b="orl,bdl,lap"  
export a=${b}*(,*lap)    

但通常会得到一个错误。这个是可能的吗?

我见过这个:

代码语言:javascript
复制
if [[ $var = fo@(?4*67).c ]];then ...  

因此,它应该像处理文件名一样工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-01 03:42:57

是这样的吗?

echo 'orl,bdl,lap' | cut -d"," -f3,2

-f3,2更改为您可能需要的其他字段。

另外,如果你需要更好的正则表达式构造,你可以使用awk,但是我需要你提供更好的细节来理解你所需要的转换。

票数 1
EN

Stack Overflow用户

发布于 2010-10-01 03:44:54

其中一种方法是使用IFS

代码语言:javascript
复制
var='orl,bdl,lap'
saveIFS=$IFS
IFS=','
array=($var)
newvar="${array[*]:1}"
IFS=$saveIFS

代码语言:javascript
复制
var='orl,bdl,lap'
saveIFS=$IFS
IFS=','
set -- $var
shift
newvar="$*"
IFS=$saveIFS

或者使用正则表达式匹配:

代码语言:javascript
复制
var='orl,bdl,lap'
pattern='^[^,]*,(.*)$'
[[ $var =~ $pattern ]]
newvar=${.sh.match[1]}
票数 0
EN

Stack Overflow用户

发布于 2014-03-26 02:24:46

以下是问题的实际答案:

代码语言:javascript
复制
> print $KSH_VERSION
Version AJM 93u+ 2012-08-01
> b="orl,bdl,lap"
> a=${b/~(E),*orl}
> print $KSH_VERSION
Version AJM 93u+ 2012-08-01
>
> b="orl,bdl,lap"
>
> a=${b/~(E),*orl} a=${a/~(E)^,*}
> print $a
bdl,lap
>
> a=${b/~(E),*bdl} a=${a/~(E)^,*}
> print $a
orl,lap
>
> a=${b/~(E),*lap} a=${a/~(E)^,*}
> print $a
orl,bdl
> 

有关详细信息,请参阅the ksh93 manpage:您必须将file name generation下的pattern和pattern-lists上的材料与parameter expansion下的search- and -replace variable expansions上的材料放在一起,才能完全解决这一问题。

请注意,虽然您不能在变量扩展中直接连续应用多个正则表达式(例如sed,例如sed "s/,*orl//;s/^,*//"),但您可以将两个变量赋值放在同一语句中,它们将从左到右连续执行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3833804

复制
相关文章

相似问题

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