在参数中,在文件内容中是否存在多个单词?

时间:2016-11-30 22:06:41

标签: linux bash shell

我试图在bash shell上找到一个命令,它允许我验证参数(在列表$*中)中给出的所有单词是否存在于当前目录中我所在的位置

例如,如果我执行此命令:

bash ./exp_quotes.sh hadir Trex blabla

如何在一个命令中测试树词的存在,并将值1或0设为$?

2 个答案:

答案 0 :(得分:1)

如果您想检查file中是否存在所有模式, 你可以这样写exp_quotes.sh

#!/usr/local/env bash

for arg; do
    grep -q "$arg" file || exit 1
done

如果任何参数不在file中,则此脚本将以1(失败)退出。 否则它将以0(成功)退出。

答案 1 :(得分:0)

你可以让grep做所有搜索所有模式的工作 您只需要将所有这些与|连接在一起,如下所示:

$ echo "$(IFS=\|; echo "$*")"
hadir|Trex|blabla

然后,您只需要使用grep进行搜索:

$ cat ./exp_quotes.sh
#!/bin/bash
file="$1"
grep -qE "\"$(IFS=\|; echo "$*")\"" "$file" && exit 1 || exit 0

更改脚本的权限(运行):

$ chmod u+x ./exp_quotes.sh

首先使用文件名和模式执行它:

$ ./exp_quotes.sh file hadir Trex blabla

即使是带空格的图案,也可以使用它:

$ ./exp_quotes.sh "file name with spaces" "a hadir with spaces"  Trex blabla

如果您需要列出包含所有单词的文件,请使用:

$ cat ./exp_quotes.sh

#!/bin/bash
grep -lE "\"$(IFS=\|; echo "$*")\"" *

如果"至少找到一个单词,则退出代码为0"与&#34相同;如果找到一个单词或其他单词,则退出0"

那将是:

#!/bin/bash
infile="$1"
grep -qE "\"$(IFS=\|; echo "$*")\"" infile && exit 0 || exit 1