string 을 포함하는 모든 입력된(시작) 명령에 대해 bash 기록 로그를 검색하고 있습니다 x
. 무슨 이유에서인지 숙제검사관은 내가 낸 숫자가 실제보다 높다고 계속 말한다.
제가 입력한 내용은 다음과 같습니다.
grep -o 'x' "/home/user/.bash_history" | wc -l >> FILE
답변1
어떤 작업 검사기를 말씀하시는지 모르겠지만 여기서 문제는 행 수가 아닌 x
발생 횟수를 계산한다는 점일 수 있습니다 x
. 이 플래그는 줄에서 일치하는 부분만 인쇄하도록 -o
하며 , 같은 줄에 s가 많으면 각각을 별도로 인쇄합니다.grep
x
$ echo "xxx" | grep -o x
x
x
x
그래서, 당신은 거기에서 그것을 원하지 않습니다 -o
. 둘 중 하나도 필요하지 않습니다 wc
. 이것이 바로 grep -c
옵션의 용도입니다.
$ history | grep -c x
1001
앞으로는 해당 옵션을 사용하기 전에 명령의 매뉴얼 페이지를 읽어 보십시오. 이렇게 하면 많은 문제가 해결될 것입니다.
답변2
더 나은 검색이 필요합니다.grep정규식을 사용하여 명령을 검색할 수 있습니다.
남자 grep에서:
DESCRIPTION
grep searches the named input FILEs for lines containing a
match to the given PATTERN.
"Ulrich Schwarz"가 말했듯이 -c 매개변수를 사용하여 계산할 수 있습니다.
남자 grep에서:
-c, --count
Suppress normal output; instead print a count of matching lines for
each input file.
따라서 정규식을 사용하여 bash_history에서 명령 실행을 검색한 다음 개수를 계산합니다.
grep -E "EXP" .bash_history
그렇지 않으면
grep "EXP" .bash_history
예: 'rm' 명령의 수를 계산하려면 다음을 수행하십시오.
grep -E ^rm* /home/<user>/.bash_history -c
그렇지 않으면
grep ^rm* /home/<user>/.bash_history -c
실시예 2: 이 문자열이 포함된 명령어의 개수를 세고 싶은 경우엑스:
grep -E X /home/<user>/.bash_history -c
그렇지 않으면
grep X /home/<user>/.bash_history -c
정규식에 대한 추가 정보:GNU - grep 정규식 구문