파일에서 패턴이 포함된 두 줄을 삭제하고 싶습니다 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