我有一个名为Liste
的子目录,里面有texte
个文件,我想找一个文本(里面有一个电话号码):
read $number
while ! grep -l $number * Liste; do
echo"Le fichier n'existe pas"
read $number
done
grep -l $number * Liste
但它不起作用。感谢。
我犯了一个错误,这是我的代码,它向我展示了2次./Liste/"name“
答案 0 :(得分:2)
问题是read
的参数是变量 name ,而不是它的值。换句话说,放弃美元符号。
read number
while ! grep -iq "$number" Liste/*; do
echo "Le numero n'existe pas"
read number
done
echo " Le numero existe"
还要注意如何正确引用,以及如何引用目录Liste
中的所有文件。最后,-q
选项会抑制grep
的正常输出(它会打印每个匹配项 - 如果您输入类似.
的内容,则会打印目录中每个文件的每一行!)最后,请注意还要echo
之后的空格是强制性的。
更新:如果要首先将没有前导目录名的匹配的文件名cd
列入目录。
cd Liste
read number
while ! grep -il "$number" *; do
echo "Le numéro n'existe pas"
read number
done
echo "Le numéro existe"
(我假设您仅想要文件名,我添加了-l
选项;但如果您不想,请将其删除。)
答案 1 :(得分:0)
您可以使用:
grep "$number" ./Liste/* >/dev/null && echo "Le numero existe" || echo "Le fichier n'existe pas"
或者,如果要输出匹配的文件的名称,请使用l
选项:
grep -l "$number" ./Liste/*
根据您的评论,使用:
grep -l "$number" Liste/* | xargs basename