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}"

관련 정보