bash text search:查找一个文件的内容是否存在于另一个文件中

时间:2014-01-15 03:28:03

标签: bash shell

假设我们有两个文件:a.txt和b.txt。每个文件都有多行文字。

如何编写shell脚本来检查b.txt中是否存在a.txt的所有内容?


对于提示人来说,我没有注意到-q如果成功匹配将输出0。

我最终得到了:

如果grep a.txt -q -f b.txt;然后

否则

网络连接

4 个答案:

答案 0 :(得分:5)

尝试grep

cat b.txt|grep -f a.txt

答案 1 :(得分:1)

这是一个脚本,可以执行您所描述的内容:

运行: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"

假设:

  • 来自 a.txt 的行顺序无关紧要

答案 2 :(得分:0)

使用grep

grep -f a.txt b.txt

答案 3 :(得分:0)

你需要编写一个迭代a.txt中每一行的循环,并使用grep(或其他方法)查看该行是否在b.txt中。如果您在b.txt中找到任何的实例,那么您可以提供答案:并非所有行都匹配。如果您没有找到此类实例,则可以断定所有行都匹配。

使用反引号捕获grep的输出可能很有用:

if [`grep -v $line b.txt`==  ""]; then

有点儿。

如果您对如何迭代文件内容有具体问题,您应该询问一个特定问题,显示您尝试过的内容。