Попытка:
less -S +F filename
Можно сделать:
grep -B 1 '&$' your_file
Это будет искать строки, заканчивающиеся в &
, удалить $
соответствовать строкам &
где угодно в них.
-B
переключатель говорит grep
производить строки "контекста", которые прибывают перед строками то соответствие. В этом случае, так как Вы хотите одну строку контекста, Вам нужно -B 1
.
Этот переключатель доступен в GNU grep
но не находится в стандарте POSIX, все же.
Вот простое sed
решение, которое должно помочь в случае, если у Вас нет GNU grep
:
sed -n '/&/!N;/&/p' your_file
Как это работает
-n
переключатель подавляет действие "печати" по умолчанию sed
/&/!N
средства: если текущая строка не содержит &
, добавьте следующую строку к пространству шаблона./&/p
средства: соответствие &
и распечатайте пространство шаблона. Вот как эмулировать grep -B1
с sed
:
sed '$!N;/pattern/P;D' infile
Он очень похож на здесь . Как и предыдущий, он читает в строке N
ext, но на этот раз P
запускается до первой \ n
ewline if ] пространство шаблонов совпадает с , а затем, как и другое, D
выбирается до первой \ n
ewline и перезапускает цикл. Итак, с вашим примером ввода:
sed '$!N;/&/P;D' infile
output:
aaaaaaaaa
bbbbbbbbb &
ccccccccc &
eeeeeeeee
fffffffff &
ggggggggg &
Опять же, чтобы увидеть, как это работает, добавьте l
до и после N
, чтобы посмотреть на пространство шаблонов ::
sed 'l;$!N;l;/&/P;D' infile
например с образцом файла:
zzzz &
aaaa
bbbb
cccc &
dddd &
hhhh
eeee
ffff &
gggg &
это команды, которые выполняет sed
, и соответствующий вывод:
cmd output 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