bash 脚本字数统计

bash 脚本字数统计

我有这个程序,我想告诉用户用户输入的单词出现在文件中的次数。这是我到目前为止所写的,但它不起作用。

#! /bin/bash
echo "Enter the file that is to be searched (~/test/new)"
        read location
echo "Enter the search term"
        read search
$result = (grep -w "$search" $location | wc -w)
echo "The search term" $search "appears "$result" time/s in "$location

我能做些什么来让它发挥作用?

答案1

如果我理解正确的话,您想要的核心命令应该计算搜索到的单词的每次出现。假设 GNU grep:

<"$file" grep -Fwo -- "$word" | wc -l

选项-F切换到非正则表达式、逐字字符串匹配。-w 进行单词搜索,就像在您的问题中一样,并-o在其自己的行上单独打印每个匹配项,从而导致 发出正确的计数 wc -l

现在,关于提示,您可以利用 bash read有一个-p选项:

read -p 'Filename: ' file
read -p 'Word: ' word

赋值采用 的形式var=value,等号周围没有美元符号或空格:

count=$(grep-command)

最后,您可以在编写输出时利用字符串插值:

echo "File '$file' contains this many occurrences of '$word': $count."

答案2

在这里大胆猜测,因为我没有尝试任何东西。

波浪号扩展在变量中有点麻烦,因为它在变量 arte 扩展之前扩展。

对于没有波形符的文件名是否可以正常工作?

另外,您最好测试一些假设,例如$location是否是一个可读文件。您可能想退出并显示一条有用的消息。这也可能会帮助您调试脚本。

答案3

tr -sc "\n$input" '[\n*]' <in | grep -xcFe"$input"

...可能会非常有效地做到这一点。但如果你只想匹配,它可能不会特别好所有的字。为此你可以这样做:

tr \[:space:]\[:punct:] '[\n*]' <in | grep -xcFe"$input"

...也许...

tr -c \[:alnum:]_ '[\n*]' <in | grep -xcFe"$input"

……只要你觉得最合适。

答案4

我更新了您尝试通过一些基本调试进行的操作,同时实现了我认为您想要的:

read -p "Please specify a location/file to be searched...Example=/var/tmp/test.txt     : " location
while [[ ! -f ${location} ]] ; do
  read -p "Unable to located file specified, please try again" location
done
read -p "Please specify a search term :" search
result=$(grep -w ${search} ${location} | wc -w)
echo "The search term ${search}, appears ${result} times inside of ${location}"

相关内容