Shell 如何grep一个具有特殊字符的单词'$';在里面?
我有两个o/p文件,我比较,以找到类似的字可用。这是脚本的一部分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
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