Используйте awk или sed для удаления всего между < >

Похоже, ты в порядке. У вас есть два раздела на вашем USB-накопителе. Вам просто нужно добавить правильную MBR в /dev/sdb1, которая распознает ваш раздел FAT32 в /dev/sdb4, если вы сделали mkfs.vfat /dev/sdb4.

Во-первых, вы помните, какую схему разделов использовал ваш USB-накопитель, GPT или MBR старой школы? Вы хотите убедиться, что используете gpt-версию fdisk, если это gpt. Сделай это:

blkid -s PTTYPE -o value /dev/sdb

Он расскажет вам. Если это просто MBR, то отлично. Все, что вам нужно сделать, это добавить syslinux MBR на этот диск. Установите пакет syslinux.

Для таблицы разделов MBR убедитесь, что загрузочный раздел помечен как «активный» в таблице разделов (флаг «загрузки» установлен )с помощью fdisk. Это должно выглядеть так:

Device Boot         Start         End   Blocks      Id  System
/dev/sdb1   *        2048      104447   51200       83  Linux 
/dev/sdb4          104448   625142447   312519000   83  Linux

Затем установите пакет syslinux, если он еще не установлен, и добавьте предоставленный MBR:

# dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/mbr.bin of=/dev/sdb

Если у вас есть GPT, убедитесь, что бит 2 атрибутов установлен для раздела /boot с помощью gdisk. Другими словами, должен быть установлен флаг «устаревшая загрузка _». При использовании sgdisk команда:

sgdisk /dev/sdb --attributes=1:set:2

Это приведет к переключению атрибута устаревшей загрузки BIOS в раздел 1 /dev/sda. Для проверки:

# sgdisk /dev/sdb --attributes=1:show

1:2:1 (legacy BIOS bootable)

Затем установите MBR:

# dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/gptmbr.bin of=/dev/sdb
7
04.06.2021, 13:12
6 ответов

так что эта команда должна помочь...

sed -i 's/<[^>]*>//g' file

файл результатов должен быть таким

Mark Yato ft. MarkAm &amp; Givēon - Thuieo (7)
The Central - AHTIOe oie (7)
Taa Too A - ryhwtyw w (8)

Отсюда вы можете сделать это

sed -i 's/([0-9])//g' file

и это должно дать вам желаемый результат

Mark Yato ft. MarkAm &amp; Givēon - Thuieo
The Central - AHTIOe oie
Taa Too A - ryhwtyw w

РЕДАКТИРОВАТЬ :обновить вторую команду, чтобы она выглядела аккуратнее.

РЕДАКТИРОВАТЬ :Альтернативный лайнер

sed -i 's/<[^>]*>//g;s/([0-9])//g' file
6
28.07.2021, 11:27

Почти готово. -Совпадения регулярных выражений "жадные", поэтому вам нужно указать шаблону, что закрывающий символ >не разрешен внутри шаблона. Иными словами, часть [^()]*внутри шаблона будет соответствовать как можно большему количеству текста "жадно". Если вы не укажете шаблону исключить закрытие >из этой части шаблона, открытие <и закрытие >, которые использует регулярное выражение, не обязательно являются парными с точки зрения HTML..

Используйте вместо этого:

sed -e 's/<[^>]*>//g'

Это заставляет регулярное выражение удалять каждый тег HTML, а не больший блок текста, который имеет <и >на концах, а также <или >в середине.

9
28.07.2021, 11:27

Анализ разметки с помощью регулярных выражений общеизвестно проблематичен .

Угловые скобки могут появляться в атрибутах тегов, комментариях и, возможно, в других местах, хотя это и не является проблемой для данных примера, что делает регулярные выражения, соответствующие от <до >, ненадежными.

Вам следует прибегнуть к инструментам, реализующим анализатор разметки.

Например, используя pandoc(версию >= 2.8 )с вашими демонстрационными данными (без добавления отсутствующего тега </ol>):

$ pandoc -f html -t plain file 
Mark Yato ft. MarkAm & Givēon - Thuieo (7)

The Central - AHTIOe oie (7)

Taa Too A - ryhwtyw w (8)

Затем вы можете легко опубликовать -обработку этого вывода как обычного текста, чтобы удалить пустые строки и другие ненужные части:

$ pandoc -f html -t plain file |
  sed -e '/^$/d' -e 's/[[:blank:]]*([[:digit:]]*)$//'
Mark Yato ft. MarkAm & Givēon - Thuieo
The Central - AHTIOe oie
Taa Too A - ryhwtyw w

Обратите внимание, что до версии 2.8 pandocиспользовалось для преобразования любого выделенного текста во все заглавные буквы -при создании вывода в формате plain. Тег <b>в элементах вашего списка вызовет такое поведение (подробнее об этом в журнале изменений или соответствующем коммите на GitHub ).

В зависимости от ваших фактических входных данных обходной путь может заключаться в использовании markdownв качестве формата ввода pandoc, либо явно:

pandoc -f markdown -t plain file

или неявно, учитывая, что pandocавтоматически принимает значение по умолчанию(pandoc -t plain file).

25
28.07.2021, 11:27

Вы можете использовать phpдля удаления всех тегов HTML и преобразования объектов HTML обратно в обычные символы:

$ <file php -r 'echo htmlspecialchars_decode(strip_tags(file_get_contents("php://stdin")), ENT_HTML5);'
Mark Yato ft. MarkAm & Givēon - Thuieo (7)
The Central - AHTIOe oie (7)
Taa Too A - ryhwtyw w (8)

Чтобы дополнительно удалить пробелы (пробелы, табуляции ), за которыми следует открытие (, за которым следует одна или несколько цифр и закрытие )в строке, оканчивающейся наsed:

$ <file php -r 'echo htmlspecialchars_decode(strip_tags(file_get_contents("php://stdin")), ENT_HTML5);' |
    sed 's/[[:blank:]]*([[:digit:]][[:digit:]]*)$//'
Mark Yato ft. MarkAm & Givēon - Thuieo
The Central - AHTIOe oie
Taa Too A - ryhwtyw w
6
28.07.2021, 11:27

Если у вас lynx, то с опцией nolistследующая команда будет работать как:

lynx -dump -nolist -force_html file | awk '{sub(/^[[:space:]]*[0-9]+\. /,""); }1'
lynx -dump -nolist -force_html --display-charset=UTF-8 --assume-charset=UTF-8 file | awk '{sub(/^[[:space:]]*[0-9]+\. /,""); }1'

## Mark Yato ft. MarkAm & Givēon - Thuieo (7)
## The Central - AHTIOe oie (7)
## Taa Too A - ryhwtyw w (8)

Чтобы удалить символы из последнего пробела, регулярное выражение / [^ ]*$/будет работать так, как предложено в этом ответе . Чтобы получить желаемый результат, команду следует изменить на:

lynx -dump -nolist -force_html file | awk '{sub(/^[[:space:]]*[0-9]+\. /,""); sub(/ [^ ]*$/,""); }1'
lynx -dump -nolist -force_html --display-charset=UTF-8 --assume-charset=UTF-8 file | awk '{sub(/^[[:space:]]*[0-9]+\. /,""); sub(/ [^ ]*$/,""); }1'

## Mark Yato ft. MarkAm & Givēon - Thuieo
## The Central - AHTIOe oie
## Taa Too A - ryhwtyw w

Если расширение файла html, то -force_htmlможет быть опущено в команде lynx, как предложил @Căcărău. В некоторых случаях приведенная выше команда может работать некорректно. Поэтому лучше включить--display-charset=UTF-8--assume-charset=UTF-8в команду lynx, потому что UTF-8является распространенной кодировкой символов в Интернете.

3
28.07.2021, 11:27

Использованиеxmlstarlet:

xmlstarlet fo -H file |
xmlstarlet sel -E latin1 -t -v '//li' -nl 2>/dev/null |
xmlstarlet unesc | sed 's/ [^ ]*$//'

Это использует xmlstarletдля преобразования HTML-фрагмента в хорошо -сформированный HTML-документ (1-ю команду ). Затем извлекается значение каждого liузла (Вторая команда ). Наконец, он декодирует любые объекты HTML (&amp;, например ). Последняя команда sedпросто удаляет все после последнего пробела в каждой строке (в скобках есть числа, которые не должны быть частью вывода ).

Вывод данного документа в вопросе:

Mark Yato ft. MarkAm & Givēon - Thuieo
The Central - AHTIOe oie
Taa Too A - ryhwtyw w
4
28.07.2021, 11:27

Теги

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