파일 이름과 동일한 줄에 grep 일치 횟수 추가

파일 이름과 동일한 줄에 grep 일치 횟수 추가

특정 단어/패턴의 일치 개수를 찾기 위해 특정 디렉토리 아래의 모든 파일을 검색하고 싶습니다. 그러나 파일 이름 바로 뒤에 숫자가 나타나기를 원합니다.

다음을 수행했지만 마지막 줄 대신 새 줄에 개수가 기록됩니다.

grep -rc "WORD" /home/user/data >> file

실제 출력

foo
12

원하는 출력:

foo12

답변1

를 사용하면 >> file파일이 추가 모드의 stdout에서 열립니다. 따라서 모든 출력은 파일 끝에 있습니다.

grep썼다 12\n. 귀하의 파일은 foo\n미리 포함되어 있습니다. 그럼 거기 있습니다 foo\n12\n. 을 얻으려면 foo12\n끝에 출력할 필요는 없지만 끝 앞의 마지막 바이트를 로 덮어 \n씁니다 12\n.

일부 쉘에는 해당 연산자가 있습니다.

그리고 zsh:

zmodload zsh/system
if sysseek -u 1 -w end -1; then
  grep -c WORD /home/user/data
else
  syserror -p "Can't seek to just before the end: "
fi 1<> file

그리고 ksh93:

grep -c WORD /home/user/data 1<> file >#((EOF - 1))

<>읽기+쓰기 모드로 파일을 여는 리디렉션 연산자입니다. 여기서 우리는 상관하지 않습니다읽다부분이지만 <>반대 방식으로 사용 >하면 파일이 잘리지 않습니다.

어쨌든 이것은추가의모델. 다른 프로세스도 동시에 파일에 쓰거나 자르면 차이점을 확인할 수 있습니다(귀하의 경우에는 문제가 될 가능성이 낮음).

또 다른 접근 방식은 파일을 잘라서 후행을 제거한 \n다음 파일을 여는 것입니다.추가의모델.

GNU 사용 truncate:

truncate -s -1 file && grep -c WORD /home/user/data >> file

답변2

sed를 사용하여 마지막 줄 끝에 추가할 수 있습니다.

sed -i '$ s/$/'$(grep -rc "WORD" /home/user/data)'/' file

또한보십시오:줄 바꿈 없이 에코로 텍스트 추가

관련 정보