값을 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