다음과 유사한 형식의 텍스트 파일이 있습니다.
PktType1 Header
PktType1 Pay
PktType1 Done
PktType0 Header
PktType0 Pay
PktType0 Done
...
내가 원하는 것은 모든 항목에 대해 grep을 수행 PktType0 Done
한 다음 줄 번호와 함께 N번째 항목을 주석 처리하는 것입니다. 예를 들어:
1 42 PktType0 Done
2 65 PktType0 Done
3 75 PktType0 Done
여기서 42, 65, 75는 줄 번호이고 1, 2, 3은 발생 횟수입니다. 나는 그것을 파일에 쓴 다음 줄 번호를 표시할 수 있다고 생각했습니다. 하지만 동일한 작업을 수행할 수 있는 도구가 있는지 궁금합니다.
답변1
패턴 일치뿐만 아니라 줄 번호 및 일치 횟수를 포함한 추가 형식 지정을 원하는 경우 Awk가 grep보다 더 나은 선택입니다.
awk '/PktType0 Done/{ print ++count, NR, $0 }' file
답변2
답변3
다른 답변의 예제 데이터 사용:
$ cat file
PktType0 Done
PktType1 Header
PktType1 Pay
PktType0 Done
PktType1 Done
PktType0 Header
PktType0 Pay
PktType0 Done
$ awk '$0 == "PktType0 Done" { print ++count, NR, $0 }' file
1 1 PktType0 Done
2 4 PktType0 Done
3 8 PktType0 Done
이 awk
명령은 문자열과 정확히 동일한 줄을 제외한 모든 줄을 무시합니다 PktType0 Done
. 카운터 값, 현재 줄 번호 및 줄 자체를 인쇄합니다.
모든 줄의 어느 위치에서나 문자열을 하위 문자열로 찾 $0 == "PktType0 Done"
도록 변경되었습니다 ./PktType0 Done/
답변4
grep -n conf file |
sed -Ee 's/^([[:digit:]]*):/\1 /' |
cat -n
이 단계는 원하는 출력에 표시되지 않는 줄 번호와 텍스트 사이에 콜론을 넣었 sed
기 때문입니다 .grep -n