0

我有 2 个 o/p 文件,我比较它们以找到可用的相似词。这是脚本的一部分..

Bool=`grep "^$i" File1`
if [ -z "$Bool" ]
then
    echo " $i Not Available"
fi

我在两个文件中都有一个单词“profile$”,但我得到了一个输出“不可用”。我尝试了单引号,但是两个文件中所有相似的单词都变得不可用。

文件 1 输出

Shared_Docs
tools
tachqe8_rvl
profile$

文件 2 输出

tools
tachqe8_rvl
profile$

在这里,我$i从 File2 中读取每一行并执行 grep 以查看它是否存在于 File1 中。如果不匹配,则回显$i不可用。

理想情况下,我的回声应该是:

Shared_Docs

但我明白了

Shared_Docs
profile$

有人可以帮忙吗?

4

2 回答 2

0

变量是否$i包含值profile$?我会假设它确实如此。

单词末尾的一美元很棘手。如果没有变量,您可以编写:

 Bool=$(grep '^profile\$' File1)

使用变量,我们需要一个技巧来抑制$作为元字符的含义:

Bool=$(grep "^$i.*" File1)

(请注意,它$(...)比使用反引号(也称为反引号)的等效项要好得多。)

另外,当然,如果您希望整行完全是profile,则无需特殊技巧:

Bool=$(grep "^$i" File1)

应该可以正常工作。


处理问题中的生物费用

while read -r i
do
    Bool=$(grep "^$i.*" File1)
    if [ -z "$Bool" ]
    then
        echo " $i Not Available"
    fi
done < File2

-r抑制了您可能会遭受的一些扩展。如果您的外壳不喜欢它,请放弃它;没有它你通常会没事的。


另一种方法

如果您正在寻找缺少的行并且顺序并不重要,那么您可以对两者进行排序File1File2然后使用comm比较它们,获取 inFile2但不在File1. 如果您有bash可用的“过程替换”,那么:

comm -13 <(sort File1) <(sort File2)

如果您没有进程替换,那么:

sort -o File1 File1
sort -o File2 File2
comm -13 File1 File2
于 2013-07-25T05:56:38.290 回答
0

出现问题的原因是“profile$”末尾的“$”。"$" 是行尾锚点,但只有出现在 RE 的末尾才具有这种特殊含义。在 RE 的末尾添加一些无害的东西。例如尝试

grep -i "^$i.*" 文件 1

于 2013-07-25T06:14:09.963 回答