Shell 如何grep一个具有特殊字符的单词'$';在里面?

Shell 如何grep一个具有特殊字符的单词'$';在里面?,shell,grep,Shell,Grep,我有两个o/p文件,我比较,以找到类似的字可用。这是脚本的一部分 Bool=`grep "^$i" File1` if [ -z "$Bool" ] then echo " $i Not Available" fi 我在两个文件中都有一个单词“profile$”,但是我得到了一个输出“notavailable”。 我尝试了单引号,但两个文件中相似的所有单词都不可用 文件1输出 Shared_Docs tools tachqe8_rvl profile$ 文件2输出 tools tac

我有两个o/p文件,我比较,以找到类似的字可用。这是脚本的一部分

Bool=`grep "^$i" File1`
if [ -z "$Bool" ]
then
    echo " $i Not Available"
fi
我在两个文件中都有一个单词“profile$”,但是我得到了一个输出“notavailable”。 我尝试了单引号,但两个文件中相似的所有单词都不可用

文件1输出

Shared_Docs
tools
tachqe8_rvl
profile$
文件2输出

tools
tachqe8_rvl
profile$
这里我的
$i
读取文件2中的每一行,并执行grep以查看它是否在文件1中。 如果不匹配,则echo
$i
不可用

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

Shared_Docs
但我明白了

Shared_Docs
profile$

有人能帮忙吗?

变量
$i
是否包含值
profile$
?我假设它是这样的

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

 Bool=$(grep '^profile\$' File1)
对于变量,我们需要一个技巧来抑制
$
作为元字符的含义:

Bool=$(grep "^$i.*" File1)
(请注意,使用
$(…)
远比使用反勾号(也称为反引号)的等效项要好。)

当然,如果您希望整条线路完全符合
profile
,则无需特殊技巧:

Bool=$(grep "^$i" File1)
应该行得通


处理问题中的生物Feep 如果您没有流程替换,则:

sort -o File1 File1
sort -o File2 File2
comm -13 File1 File2

出现此问题的原因是“profile$”末尾的“$”。“$”是线结束锚,但只有当它出现在RE的末尾时才具有这种特殊意义。在RE的末尾添加一些无害的内容。例如尝试

grep-i“^$i.*”文件1

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