패턴이 포함된 줄과 [중복] 앞의 줄을 삭제하세요.

패턴이 포함된 줄과 [중복] 앞의 줄을 삭제하세요.

파일에서 패턴이 포함된 두 줄을 삭제하고 싶습니다 aaa bbb ccc.

패턴이 포함된 줄 aaa bbb ccc과 그 앞의 줄을 삭제하는 다음 표현식을 사용했습니다.

$ sed -n '/aaa bbb ccc/{s/.*//;x;d;};x;p;${x;p;}' file.txt | sed '/^$/d'

이것은 하나의 파일에 대해 작동합니다. 여러 파일에서는 작동하지 않습니다

$ for i in *.txt; do sed -n '/aaa bbb ccc/{s/.*//;x;d;};x;p;${x;p;}' "$i" | sed '/^$/d'; done

예시 파일:

xxx
yyy
aaa bbb ccc
eee
fff
aaa bbb ccc
ggg
hhh

결과 파일:

xxx
eee
ggg
hhh

답변1

사용하고 있는 것 같습니다 gnu sed. 이 경우 다음과 같은 작업을 수행할 수 있습니다.

sed -s 'N;/PATTERN/!P;D' ./*.txt

다른 sed경우에는 파일 목록을 반복해야 합니다.

for file in ./*.txt
do
sed '$!N;/PATTERN/!P;D' "$file"
done

이는 패턴 공간에 항상 두 줄을 유지하고 패턴 공간이 일치하지 않으면 첫 번째 줄을 인쇄하므로 입력은 다음과 같습니다.

some line
PATTERN
PATTERN
more
lines
another line
PATTERN

그것은 인쇄됩니다

more
lines

관련 정보