grep 값을 가져오고 값과 함께 개수를 출력합니다.

grep 값을 가져오고 값과 함께 개수를 출력합니다.

값을 grep하고 값과 함께 개수를 출력하는 bash 스크립트를 만들려고합니다.

이 같은

grep -c 'Thenis' example.txt > example.lst

그런데 해당 목록 파일에는 개수뿐만 아니라 아래와 같이 내가 입력한 값도 표시됩니다.

Thenis: 123

답변1

서브쉘을 시작하고 $0변수를 사용하여 이를 수행할 수 있습니다.

bash -c 'echo "$0: $(grep -c $0 example.txt)"' 'Thenis' > example.lst

답변2

숫자만 출력되기 때문에 grep -c주어진 패턴을 접두사로 사용해야 합니다. 이는 printf개행 문자를 따르지 않고 내장 쉘 인쇄 모드를 사용하여 수행할 수 있습니다 . 그런 다음 grep에게 (같은 줄에) 개수를 인쇄하도록 요청합니다.

괄호를 사용하여 하위 쉘에 두 명령문을 배치하면 모든 출력을 한 번만 리디렉션할 수 있습니다.

나는 이렇게 할 것이다:

(printf '%s: ' Thenis; grep -c Thenis example.txt) > example.lst

이 작업을 수행하기 위한 간단한 스크립트를 만들고 싶다면 다음을 수행하세요.

#!/bin/sh
if [ "$#" -ne 2 ]
then
    echo >&2 "Usage: $0 pattern file"
    exit 1
fi
printf '%s: ' "$1"
grep -c "$1" "$2"

답변3

아직 sed를 사용해 본 사람이 있나요?

grep -c Thenis example.txt|sed s/^/Thenis:\ /  > example.lst

또는 보다 일반적인 솔루션을 원하고 gnu sed가 있는 경우

echo Thenis -- example.txt | \
sed -re 's/^(.*) -- (.*)$/echo -n \1:;grep -c \1 \2/e'

마지막 경고: 그것은 자신의 발에 총을 쏠 만큼 강력합니다.

답변4

다음을 작성해 보세요 script.sh.

#!/bin/bash

echo $1: $(grep -c "$1" "$2")

따라서 다음과 같은 경우 example.txt:

Then is, Then-is, Then's, Thenis, Thins,
Thesis, Thanes, Thence, Things,
Thenis, Thorns, Thane's

script.sh명령 프롬프트에서 실행하고 출력을 다음 위치에 저장합니다 example.lst.

$ ./script.sh 'Thenis' example.txt > example.lst

searchword: count원하는 결과는 다음에서 찾을 수 있습니다 example.lst.

$ cat example.lst
Thenis: 2

세부 사항

  • 모든 스크립트와 마찬가지로, 예를 들어 다음 명령을 실행하여 스크립트가 실행 가능한지 확인하십시오.sudo chmod +x script.sh
  • bash 위치 인수: $1첫 번째 인수는 에 전달되고 script.sh, $2두 번째 인수는 에 전달됩니다.
  • $(... )사용하기 위해 포함된 명령의 결과를 얻기 위한 명령 대체입니다.echo

관련 정보