Если это должно быть awk
, просто сделайте:
awk -- '/AAA/,/BBB/{print}'
Но кажется, что sed
идеально подойдет и для вашего случая. Итак, аналогично просто делаем:
sed -ne '/AAA/,/BBB/p'
В обеих командах используйте запятую, чтобы указать, что вы хотите рассмотреть все строки, начиная с (и включая )строку, соответствующую первому шаблону, до (и включая )строку, соответствующую первому шаблону. второй узор.
Очень простой подход заключается в следующем:
$ sed 's,.........DOWNLOAD</DIV>, DOWNLOAD</DIV>,g' input.txt
<DIV>SOFTWARE V1.0.1.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
<DIV>SOFTWARE V1.0.2.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
<DIV>SOFTWARE V1.0.3.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
<DIV>SOFTWARE V1.0.4.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
<DIV>SOFTWARE V1.0.5.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
Это заменяет 9 символов перед DOWNLOAD</DIV>
и заменяет его на DOWNLOAD</DIV>
С sed, у которого есть -E
для включения ERE (, например. GNU sed и BSD/OSX sed):
sed -E 's:.{8}( DOWNLOAD</DIV>):\1:' file
иначе с любым POSIX sed:
sed 's:.\{8\}\( DOWNLOAD</DIV>\):\1:' file
напр.
$ sed -E 's:.{8}( DOWNLOAD</DIV>):\1:' file
<DIV>SOFTWARE V1.0.1.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
<DIV>SOFTWARE V1.0.2.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
<DIV>SOFTWARE V1.0.3.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
<DIV>SOFTWARE V1.0.4.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
<DIV>SOFTWARE V1.0.5.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
$ sed 's:.\{8\}\( DOWNLOAD</DIV>\):\1:' file
<DIV>SOFTWARE V1.0.1.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
<DIV>SOFTWARE V1.0.2.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
<DIV>SOFTWARE V1.0.3.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
<DIV>SOFTWARE V1.0.4.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
<DIV>SOFTWARE V1.0.5.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
Вы можете попробовать это:
sed 's#SOFTWARE \(.*\)\.[A-Z]\{7\} DOWNLOAD#SOFTWARE \1 DOWNLOAD#' file
Использование Раку (урожденная Perl6)
~$ raku -pe 's/ <(. ** 8)> <?before " DOWNLOAD</DIV>" $$ > //;' download.txt
<DIV>SOFTWARE V1.0.1.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
<DIV>SOFTWARE V1.0.2.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
<DIV>SOFTWARE V1.0.3.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
<DIV>SOFTWARE V1.0.4.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
<DIV>SOFTWARE V1.0.5.0 DOWNLOAD</DIV>
<DIV>...</DIV>
<DIV>...</DIV>
В приведенном выше коде используется флаг автопечати -pe
в сочетании с оператором подстановки s///
. Внутри левой -половины оператора s///
для поиска закрывающего тега DOWNLOAD</DIV>
используется утверждение нулевой -ширины, а предыдущие 8 символов точно захватываются (и удаляются )с помощью <(. ** 8)>
код.
ХТН.