Удалить строку, если следующая строка начинается с шаблона

Вы можете отладить ваше telnet-соединение на клиенте, добавив 3 строки в ваш файл~/.telnetrc:

scope
 set netdata
 set options

где scope— это имя хоста вашей области, которое должно быть в столбце 1, а остальные 2 строки должны быть с отступом в 1 пробел.

Когда вы запускаете telnet, он теперь должен показывать вам прочитанные и записанные данные, а также отправленные и полученные команды, если таковые имеются.

Вы можете отправить явные команды согласования telnet, чтобы узнать, отвечает ли ваша область. Обратите внимание: когда вы меняете настройку на значение, которое, по мнению пульта, уже есть, оно не будет отвечать, поэтому вам может потребоваться попробовать команду и ее инверсию. Например, (введите управление -] , чтобы войти в командный режим ), отправьте «ты здесь?»:

telnet> send ayt
> 0x0   fff6
< 0x0   74643a207265637620494143204159540d0a0d0a5b686f6d65203a207965735d
< 0x20  0d0a
td: recv IAC AYT

[scope : yes]

Строки данных >и <являются результатом set netdata. Линии согласования td:являются результатом set options. (Если вы их не видите, возможно, ваш rc-файл был проигнорирован, поэтому введите их явно в командном режиме.)

Включить эхо, затем выключить и снова включить:

telnet> send do echo

telnet> send dont echo
> 0x0   fffe01
< 0x0   74643a207265637620646f6e74204543484f0d0afffc0174643a2073656e6420
< 0x20  776f6e74204543484f0d0a
td: recv dont ECHO
td: send wont ECHO

telnet> send do echo
> 0x0   fffd01
< 0x0   74643a207265637620646f204543484f0d0afffb0174643a2073656e64207769
< 0x20  6c6c204543484f0d0a
td: recv do ECHO
td: send will ECHO
5
12.05.2020, 16:43
3 ответа

Вы можете попробовать что-то вроде этого:

$ sed -e '$!N;/^>.*\n>/D' -e 'P;D' file
>seq1
actgatgac
>seq2
ctgacgtca
>seq4
gtagctagt
>seq5
tgacatgca

То есть

  • сохранить двухстрочный буфер с помощью $!N...P;D
  • искать шаблон, который начинается с >и имеет еще один >после новой строки
  • удалить до новой строки
8
28.04.2021, 23:14

Пример awk:

awk 'BEGIN {lasta="XXX"} {if ($0 !~ /^ *>/) printf("%s\n%s\n",lasta,$0);   lasta=$0;}'  fileNAME.txt

эквивалентно

cat fileNAME.txt | awk 'BEGIN {lasta="XXX"} {if ($0 !~ /^ *>/) printf("%s\n%s\n",lasta,$0);   lasta=$0;}'
1
28.04.2021, 23:14

Пробовал использовать команду awk, работает нормально

awk '{a[++i]=$0}/^[actg]/{for(x=NR-1;x<=NR;x++)print a[x]}' file.txt

выход

>seq1
actgatgac
>seq2
ctgacgtca
>seq4
gtagctagt
>seq5
tgacatgca
0
28.04.2021, 23:14

Теги

Похожие вопросы