grep
정규식과 일치하는 줄만 반환됩니다. 일반적으로 제가 실제로 보고 싶은 것은 일치하는 줄 위와 아래의 몇 줄입니다(예: 2줄). 이를 달성하는 간단한 방법이 있습니까?
편집자: 운영 체제: Ubuntu 기반 Bodhi Linux. 댓글에서 언급했듯이 -C는 일반 버전에서는 작동하지 않지만 제 경우에는 GNU grep이었습니다.
답변1
에서 man grep
:
컨텍스트 라인 제어
-A NUM, --after-context=NUM
줄을 일치시킨 후 NUM 줄 후행 컨텍스트를 인쇄합니다. 연속적으로 일치하는 그룹 사이에 그룹 구분 기호(--)가 포함된 줄을 배치합니다. -o 또는 --only-matching 옵션을 사용하면 효과가 없으며 경고가 표시됩니다.
-B NUM, --before-context=NUM
행을 일치시키기 전에 NUM행 선행 컨텍스트를 인쇄합니다. 연속적으로 일치하는 그룹 사이에 그룹 구분 기호(--)가 포함된 줄을 배치합니다. -o 또는 --only-matching 옵션을 사용하면 효과가 없으며 경고가 표시됩니다.
-C NUM, -NUM, --context=NUM
NUM줄의 출력 컨텍스트를 인쇄합니다. 연속적으로 일치하는 그룹 사이에 그룹 구분 기호(--)가 포함된 줄을 배치합니다. -o 또는 --only-matching 옵션을 사용하면 효과가 없으며 경고가 표시됩니다.
그게 얼마나 쉬운지 보세요? man
당신의 친구입니다.
답변2
사용앗(휴대용):
awk '
{
arr[NR]=$0
}
END{
for (i=0;i<=NR;i++) {
if (arr[i] ~ grep){
for (j=i-count; j<=i+count; j++) {
print arr[j]
}
}
}
}
' grep=kdm count=4 /etc/passwd
게임 전/후에 4줄로 사용자를 kdm
파악 합니다./etc/passwd
안에쉿스크립트:
#!/bin/sh
awk '
{
arr[NR]=$0
}
END{
for (i=0;i<=NR;i++) {
if (arr[i] ~ grep){
for (j=i-count; j<=i+count; j++) {
print arr[j]
}
}
}
}
' grep="$1" count="$2" "$3"
용법:
./contextgrep <pattern> <count> <file>