繁体   English   中英

grep 文件名仅在 linux bash

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM