Похоже, ты в порядке. У вас есть два раздела на вашем 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
так что эта команда должна помочь...
sed -i 's/<[^>]*>//g' file
файл результатов должен быть таким
Mark Yato ft. MarkAm & 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 & Givēon - Thuieo
The Central - AHTIOe oie
Taa Too A - ryhwtyw w
РЕДАКТИРОВАТЬ :обновить вторую команду, чтобы она выглядела аккуратнее.
РЕДАКТИРОВАТЬ :Альтернативный лайнер
sed -i 's/<[^>]*>//g;s/([0-9])//g' file
Почти готово. -Совпадения регулярных выражений "жадные", поэтому вам нужно указать шаблону, что закрывающий символ >
не разрешен внутри шаблона. Иными словами, часть [^()]*
внутри шаблона будет соответствовать как можно большему количеству текста "жадно". Если вы не укажете шаблону исключить закрытие >
из этой части шаблона, открытие <
и закрытие >
, которые использует регулярное выражение, не обязательно являются парными с точки зрения HTML..
Используйте вместо этого:
sed -e 's/<[^>]*>//g'
Это заставляет регулярное выражение удалять каждый тег HTML, а не больший блок текста, который имеет <
и >
на концах, а также <
или >
в середине.
Анализ разметки с помощью регулярных выражений общеизвестно проблематичен .
Угловые скобки могут появляться в атрибутах тегов, комментариях и, возможно, в других местах, хотя это и не является проблемой для данных примера, что делает регулярные выражения, соответствующие от <
до >
, ненадежными.
Вам следует прибегнуть к инструментам, реализующим анализатор разметки.
Например, используя 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
).
Вы можете использовать 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
Если у вас 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
является распространенной кодировкой символов в Интернете.
Использование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 (&
, например ). Последняя команда sed
просто удаляет все после последнего пробела в каждой строке (в скобках есть числа, которые не должны быть частью вывода ).
Вывод данного документа в вопросе:
Mark Yato ft. MarkAm & Givēon - Thuieo
The Central - AHTIOe oie
Taa Too A - ryhwtyw w