Đây là cách mô phỏng grep -B1
với sed
:
sed '$!N;/pattern/P;D' infile
Nó rất giống với cái ở đây . Cũng giống như cái khác, nó đọc trong N
dòng ext nhưng lần này, nó P
gợi ý đến \n
ewline đầu tiên nếu không gian mẫu khớp với nhau , và sau đó, giống như dòng kia, D
chạy lên \n
ewline đầu tiên và khởi động lại chu kỳ. Vì vậy, với đầu vào mẫu của bạn:
sed '$!N;/&/P;D' infile
đầu ra:
aaaaaaaaa
bbbbbbbbb &
ccccccccc &
eeeeeeeee
fffffffff &
ggggggggg &
Một lần nữa, để xem cách nó hoạt động, hãy thêm l
trước và sau N
để xem không gian mẫu ::
sed 'l;$!N;l;/&/P;D' infile
ví dụ với một tệp mẫu:
zzzz &
aaaa
bbbb
cccc &
dddd &
hhhh
eeee
ffff &
gggg &
đây là các lệnh sed
thực thi và đầu ra tương ứng:
cmd đầu ra cmd
l zzzz &$ N # read in the next line
l zzzz &\naaaa$ # pattern space matches so print up to \n
P zzzz & D # delete up to \n
l aaaa$ N # read in the next line
l aaaa\nbbbb$ D # delete up to \n (no match so no P)
l bbbb$ N # read in the next line
l bbbb\ncccc &$ # pattern space matches so print up to \n
P bbbb D # delete up to \n
l cccc &$ N # read in the next line
l cccc &\ndddd &$ # pattern space matches so print up to \n
P cccc & D # delete up to \n
l dddd &$ N # read in the next line
l dddd &\nhhhh$ # pattern space matches so print up to \n
P dddd & D # delete up to \n
l hhhh$ N # read in the next line
l hhhh\neeee$ D # delete up to \n (no match so no P)
l eeee$ N # read in the next line
l eeee\nffff &$ # pattern space matches so print up to \n
P eeee D # delete up to \n
l ffff &$ N # read in the next line
l ffff &\ngggg &$ # pattern space matches so print up to \n
P ffff & D # delete up to \n
l gggg &$ # last line so no N
l gggg &$ # pattern space matches so print up to \n
P gggg & D # delete up to \n