[英]grep filename only in linux bash
我想找一个文件。 如果用户输入“file.txt”,那么我需要回显“file.txt”。 但如果找不到文件名,则回显“未找到”。 我拥有的代码用于在文件中查找单词。 但是如果我只需要搜索文件怎么办。 如果我写: result=`grep $filename`
,它将不起作用。 grep 文件名的格式是什么?
#!/bin/bash
echo -n "File name : "
read filename
echo -n "Word : "
read word
result=`grep $word $filename`
if [ "$result" != "" ]
then
echo "$result"
else
echo "Not found"
fi
看起来您正在尝试确定$word
中是否存在$filename
。 如果是这样:
if ! grep "$word" "$filename"; then
echo not found >&2
fi
确定文件是否存在的检查似乎是多余的,因为如果文件不存在, grep
会发出错误消息,但也许你想要类似的东西:
if test -e "$filename" && ! grep "$word" "$filename"; then
echo "$word" is not found in "$filename" >&2
else
echo "$filename" does not exist >&2
fi
除了来自grep
的错误消息指出文件不存在之外,它不会打印冗余的“未找到”。
使用 grep,您可以这样尝试:
#!/bin/bash
OLDIFS="$IFS"
IFS=''
read -p "File name : " filename
IFS=$OLDIFS
grep -l '' "$filename" 2>/dev/null
! [ $? -eq 0 ] && echo "file $filename not found"
bemol: grep 找不到大小为 0 的文件。
如果我没看错...
grep -l "$word" "$filename" 2>&- || echo "not found"
如果$word
存在于$filename
中,则-l
选项将 output 文件的名称。
如果没有, grep
将返回错误退出代码和||
("or") 将执行echo
。
$: echo foo > bar
$: grep -l foo ???
bar
$: rm bar
$: grep -l foo ??? 2>&- || echo "not found"
not found
2>&-
关闭 STDERR 以便grep
不会抛出自己的错误消息。
没有它 -
$: grep -l foo ??? || echo "not found"
grep: ???: No such file or directory
not found
当然https://mywiki.wooledge.org/BashPitfalls#myprogram_2.3E.26-建议不要关闭标准流,因此您可能应该使用2>/dev/null
。
所以,整个脚本:
#!/bin/bash
read -p "Filename: " filename
read -p "Word: " word
grep -l "$word" "$filename" 2>/dev/null || echo "not found"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.