首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在KornShell脚本中搜索字符串中的特定字符?

如何在KornShell脚本中搜索字符串中的特定字符?
EN

Stack Overflow用户
提问于 2013-01-16 10:26:58
回答 1查看 3.7K关注 0票数 1

我的KornShell (ksh)脚本接收命令行参数作为输入。我的任务是检查这些参数中是否包含abc,并只打印其中包含abc的参数。例如:-

代码语言:javascript
复制
./tree.sh rabc try qwerty

产出应是:

代码语言:javascript
复制
rabc

这就是我尝试过的:

代码语言:javascript
复制
var=$*
z=grep "abc" var
echo $z

对此有什么见解吗?

EN

回答 1

Stack Overflow用户

发布于 2013-01-16 13:22:46

首先,您需要能够遍历参数。如果我们查看一下man ksh,我们会发现以下内容:

单词中的名字.;做列表;完成 每次执行for命令时,都会将vname设置为从in word列表中提取的下一个word。如果省略了in word ...,那么for命令对从1开始设置的每个位置参数执行一次do list (参见下面的参数扩展)。当列表中没有更多的单词时,执行就会结束。

因此,要得到循环,我们需要这样的东西:

代码语言:javascript
复制
for arg
do
    <stuff>
done

在我们运行<stuff>时,$arg将是传入的参数之一。注意,您需要前面的$部件;ksh要求它知道如何使用存储在变量中的值,而不仅仅是变量名。

接下来,我们需要确定$arg是否包含abc。我们将使用grep,但请记住,grep会查看您给它的文件,或者查看它的标准输入("stdin")中传递的任何内容。您提供的grep "abc" var将让grep尝试在一个名为var的文件中查找abc

我们需要将$arg输入到grep的stdin中。我们将使用echo,它将东西放入标准输出("stdout"),并使用一个“管道”,它将一个命令的stdin与另一个命令的stdout连接起来:

代码语言:javascript
复制
echo "$arg" | grep abc

上面的内容将把$arg中的任何内容放到stdin上,然后grep只在包含abc的情况下才会打印它。

因此,完整的脚本如下:

代码语言:javascript
复制
#!/bin/ksh
for arg
do
    echo "$arg" | grep abc
done

这不能正确地处理参数包含换行符的情况;我将把它作为未来的问题留给您自己解决。

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

https://stackoverflow.com/questions/14356216

复制
相关文章

相似问题

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