我有两个文件
File1中
area a
area b
areaf
文件2
area a :aaaa
area b:bbbb
area3:abc
areaf:hsg
area4:uhg
area5:yutr
while read -r line
do
grep -w ^line File2 | cut -d ":" -f2
done < File1
期望的输出
aaaa
bbbb
hsg
实际输出
grep: can't open a
area a
grep: cant open b
area3:abc
areaf:hsg
area4:uhg
area5:yutr
但是当我运行grep -w ^"area a" File2 | cut -d ":" -f2
时,它会给出正确的输出:
aaaa
请帮助我。我也试过循环。没有成功。 grep在循环内部不起作用。
答案 0 :(得分:2)
您的变量line
可能包含“特殊字符”。例如,shell可能会将其解释为分隔符。或者某些可能被grep解释为模式元字符的字符。
您需要使用fgrep
并引用您的变量(我不确定-w
为该命令添加任何内容 - 为什么您觉得需要它):
fgrep -w "$line"
但这样做会让你无法找到“第一个角色”
如果需要匹配“行首”匹配,则另一个选项是转义搜索字符串:
while read -r line
do
line=$(echo "$line" | sed -e 's/[]\/$*.^|[]/\\&/g')
grep -w "^$line" File2 | cut -d ":" -f2
done < File1
答案 1 :(得分:0)
您可以在没有循环的情况下获得相同的结果,因为grep
可以通过-f
选项从文件中读取模式。这将更加强大:
grep -f input1 input2 | cut -d: -f2
给出:
aaaa
bbbb
hsg