我有2个o / p文件,我比较找到类似的单词。这是脚本的一部分..
Bool=`grep "^$i" File1`
if [ -z "$Bool" ]
then
echo " $i Not Available"
fi
我在两个文件中都有一个单词“profile $”,但我得到一个输出“Not Available”。 我试过单引号但是两个文件中相似的所有单词都不可用。
文件1输出
Shared_Docs
tools
tachqe8_rvl
profile$
文件2输出
tools
tachqe8_rvl
profile$
这里我的$i
从File2读取每一行并执行grep以查看它是否在File1中。
如果不匹配则回显$i
不可用。
理想情况下,我的回声应该是:
Shared_Docs
但是我得到了
Shared_Docs
profile$
有人可以帮忙吗?
答案 0 :(得分: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
会抑制您可能遭受的一些扩展。如果你的shell不喜欢它,请放弃它;没有它你通常会没事。
如果您要查找缺失的行并且订单不重要,那么您可以对File1
和File2
进行排序,然后使用comm
对它们进行比较,获取所有条目File2
但不在File1
。如果您有bash
和'进程替换',那么:
comm -13 <(sort File1) <(sort File2)
如果您没有进程替换,那么:
sort -o File1 File1
sort -o File2 File2
comm -13 File1 File2
答案 1 :(得分:0)
问题出现是因为“$”结尾处的“$”。 “$”是行尾锚点,但只有当它出现在RE的末尾时才具有这种特殊含义。在RE结束时添加无害的东西。例如,尝试
grep -i“^ $ i。*”File1