패턴이있는 줄과 그 banana
뒤에 2 줄을 제거하는 다음 코드가 있습니다.
sed '/banana/I,+2 d' file
여태까지는 그런대로 잘됐다! 그러나 전에 2 줄을 제거해야하지만 banana
“빼기 부호”또는 무엇이든 ( grep -v -B2 banana file
해야 할 일과 비슷 하지만) 할 수는 없습니다.
teresaejunior@localhost ~ > LC_ALL=C sed '-2,/banana/I d' file
sed: invalid option -- '2'
teresaejunior@localhost ~ > LC_ALL=C sed '/banana/I,-2 d' file
sed: -e expression #1, char 16: unexpected `,'
teresaejunior@localhost ~ > LC_ALL=C sed '/banana/I,2- d' file
sed: -e expression #1, char 17: unknown command: `-'
tac file | sed ... | tac
. : P
sed '/banana/,+2d' file
그 것 또한 일
awk 'tolower($0)~/bandana/{print prev[!idx];print prev[idx]} {idx=!idx;prev[idx]=$0}' filein
이것은 주석이며 답변이 아니기 때문에 (이미 다른 답변이 있기 때문에) 너무 자세하게 설명하지는 않지만 그 요점은 항상 이전 [0] 이전 [1]에서 앞의 두 기록은 "신선한"하는 반복에 있지만 항상에 따라 prev[idx]
인쇄 할 때, 그래서, 당신은에 인쇄 !idx
다음 idx
순서. 어쨌든 idx
현재 레코드를 번갈아 가며 에 넣습니다 prev[idx]
.
awk '{l[m=NR]=$0}/banana/{for(i=NR-2;i<=NR;i++)delete l[i]}END{for(i=1;i<=m;i++)if(i in l)print l[i]}'
입니다. 이것은 효율적이지 않으므로 솔루션이 아니라 힌트 일뿐입니다.