假设我们有两个文件:a.txt和b.txt。每个文件都有多行文本。
我该如何编写一个shell脚本来检查a.txt的所有内容是否都存在于b.txt中?
谢谢大家的提示,我没有注意到-q选项会在成功匹配时输出0。
最终我得到了以下代码:
if grep a.txt -q -f b.txt
; then
else
fi
尝试使用 grep
cat b.txt|grep -f a.txt
\n
,那么也许就可以解决问题,但是如何做到呢? - orangecat
命令,可以直接使用 grep
命令从文件中读取:grep -f a.txt b.txt
。 - glenn jackmangrep -f <patternfile>
只会显示与模式文件中的一些模式匹配,但不是全部。另一种方法是使用 sort -u
对文件进行排序,然后使用 comm -23 a.txt b.txt
,如果没有在 b.txt 中出现过的 a.txt 行,则会产生空输出。 - Alexander Klimetschek使用grep命令
grep -f a.txt b.txt
这里有一个脚本可以实现您所描述的功能:
运行:sh SCRIPT.sh a.txt b.txt
# USAGE: sh SCRIPT.sh TEST_FILE CHECK_FILE
TEST_FILE=$1
CHECK_FILE=$2
## for each line in TEST_FILE
while read line ; do
## check if line exist in CHECK_FILE; then assign result to variable
X=$(grep "^${line}$" ${CHECK_FILE})
## if variable is blank (meaning TEST_FILE line not found in CHECK_FILE)
## print 'false' and exit
if [[ -z $X ]] ; then
echo "false"
exit
fi
done < ${TEST_FILE}
## if script does not exit after going through each line in TEST_FILE,
## then script will print true
echo "true"
假设:
if [`grep -v $line b.txt`== ""]; then
这是与编程有关的内容。
如果您对如何迭代文件内容有具体问题,您应该提出一个具体的问题,并展示您尝试过的内容。
comm
命令。 - DominiCane