특정 단어/패턴의 일치 개수를 찾기 위해 특정 디렉토리 아래의 모든 파일을 검색하고 싶습니다. 그러나 파일 이름 바로 뒤에 숫자가 나타나기를 원합니다.
다음을 수행했지만 마지막 줄 대신 새 줄에 개수가 기록됩니다.
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
또한보십시오:줄 바꿈 없이 에코로 텍스트 추가