我试图在bash shell上找到一个命令,它允许我验证参数(在列表$*
中)中给出的所有单词是否存在于当前目录中我所在的位置
例如,如果我执行此命令:
bash ./exp_quotes.sh hadir Trex blabla
如何在一个命令中测试树词的存在,并将值1或0设为$?
?
答案 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