Как мне извлечь фрагменты текста из файла с помощью sed?

Linux работает на нескольких платформах ЦП. Если вы распространяли файлы ELF (или любые другие необработанные исполняемые файлы), была бы вероятность, что некоторые версии Linux не смогут запустить программное обеспечение. В стремлении сделать программное обеспечение максимально доступным, предпочтительно использовать исходный код. Например, Linux работает на процессорах Sparc, Intel, AMD, ARM и других типах.

Если файл ELF был нацелен, например, на процессоры Intel, другие типы оборудования не могли запускать программное обеспечение. ELF не зависит от платформы, но код, который он размещает, должен соответствовать машинному коду платформы. Вы заметите, сколько дистрибутивов имеют похожие пакеты (например, пакеты _386 и _586, когда он поддерживает разные процессоры) - вам необходимо установить правильный файл ELF, чтобы получить правильную работу.

Точно так же, если я решу создать собственную версию Linux, в которой используются различные прерывания, компоновщики и т. Д., Мне все равно понадобится исходный код для компиляции кода. Даже если в исходном коде нет инструкций по сборке для конкретной платформы, каждая платформа отличается и не может запускать ELF из другой системы.

0
22.04.2018, 00:21
2 ответа

Анализ такого файла лучше выполнять с помощьюawk:

awk -F, '{ print $2 }' file

или cut,

cut -d, -f 2 file

Это даст вам"category/subcategory/sub-subcategory/item-1"(включение котировок )из предоставленных вами данных.

С sedи с использованием предоставленного вами регулярного выражения (, но с заменой \wна[[:alnum:]]):

sed -E 's@.*,"([[:alnum:]]+(/[[:alnum:]-]+)+)",.*@\1@' file

Это заменяет всю строку битом, который соответствует регулярному выражению в первом наборе круглых скобок. Это возвращает category/subcategory/sub-subcategory/item-1для предоставленных вами данных.

Для более общего разбора файла CSV, включая правильную обработку кавычек и полей, которые могут содержать запятые или двойные кавычки, используйтеcsvkit:

csvcut -c 2 file
0
28.01.2020, 04:24

В регулярном выражении как таковом нет ничего плохого, просто вы попали в ловушку для неосторожных. Внутри [] \w есть два литерала: обратная косая черта и "w", а НЕ "\w", как можно было бы подумать, или как в Perl, откуда он заимствован, но не полностью.

Одним из способов было бы явно указать, что находится в \w, а затем продолжить:

sed -Ee '
    /\n/{P;D;}
    s|\w+(/[-_A-Za-z0-9]+)+|\n&\n|;D
'
0
28.01.2020, 04:24

Теги

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