首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查文件中的所有字符串是否匹配

如何检查文件中的所有字符串是否匹配
EN

Stack Overflow用户
提问于 2018-05-07 11:40:51
回答 7查看 132关注 0票数 0

我从一个由管道(|)字符分隔的字符串组成的现有程序中获得输入:

代码语言:javascript
运行
复制
$ echo "$list_of_nodes"
NODE-BB-4|NODE-AA-1|DUMMY

现在,我需要检查每个文件是否存在于一个单独的文件中:

代码语言:javascript
运行
复制
$ cat file
NODE-BB-4 1.1.1.1
NODE-AA-1 2.2.2.2
  • 案例-1 应该在输入字符串为"NODE-BB-4|NODE-AA-1"时传递,因为这两个字符串都在文件中,
  • 案例-2 当输入字符串为"NODE-BB-4|NODE-AA-1|DUMMY"时,应该会失败,因为文件中不存在"DUMMY"

我就是这么想的,但这显然不是最好的主意:

代码语言:javascript
运行
复制
$ echo "$list_of_nodes" |tr '|' '\n' |while read line;
> do grep -q "$line" foo ;
> echo $? ;
> done|awk '{s=s+$0} END{print s}' |awk '$1>0{print "Fail"}'
Fail

在这里,我将每个模式循环到grep,并存储返回代码,然后检查它是否是grater,然后检查它是否为0。

EN

Stack Overflow用户

发布于 2018-05-07 19:44:10

当节点被指定为文件中的第一列时,可以使用grep

我想使用您的tr方法,以不同的方式编写。

代码语言:javascript
运行
复制
tr '|' '\n' <<< "${list_of_nodes}"

可以使输出看起来像一个具有进程替换的文件。

代码语言:javascript
运行
复制
<(tr '|' '\n' <<< "${list_of_nodes}"

当您想使用文件的第一个字段检查这些字段时,请将该文件剪切。

代码语言:javascript
运行
复制
cut -d' ' -f1 file

您可以将outoput用于另一个进程substition,并使用grep (选项x:完全匹配)。

代码语言:javascript
运行
复制
grep -xvf <(cut -d' ' -f1 file) <(tr '|' '\n' <<< "${list_of_nodes}")

现在,您可以用sed替换输出。

代码语言:javascript
运行
复制
sed -r 's/.+/FAIL: &/'

零件合在一起:

代码语言:javascript
运行
复制
grep -xvf <(cut -d' ' -f1 file) <(tr '|' '\n' <<< "${list_of_nodes}") |
   sed 's/.+/FAIL/'
票数 1
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50213379

复制
相关文章

相似问题

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