Как добавить столбец на основе регулярного выражения

вы можете удалить оба экземпляра:

rpm -e --justdb --nodeps --allmatches gvfs-fuse-1.40.0-1.1.x86_64

, а затем переустановите одиночный пакет (, который вам потребуется загрузить в этом случае):

rpm -i --justdb --nodeps gvfs-fuse-1.40.0-1.1.x86_64.rpm

или если вы не возражаете против переустановки файлов (и повторного выполнения пре-/пост-скриптов):

yum/zypper install gvfs-fuse-1.40.0-1.1
1
23.03.2021, 11:47
1 ответ
$ cat file
>hCoV-19/xxx/xxx-YYY/xxx
>hCoV-19/xxx/xxx-ZZZ/xxx
$ awk -F '[/-]' '{ printf "%s %s\n", $5, $0 }' file
YYY >hCoV-19/xxx/xxx-YYY/xxx
ZZZ >hCoV-19/xxx/xxx-ZZZ/xxx

Приведенный выше код awkобрабатывает данные как строки, разделенные на поля либо /, либо -. Пятое такое поле — это поле, которое вы хотите добавить в начало каждой строки, что и делает оператор printf.

Если -не является хорошим разделителем (, это было бы не так, если бы строка перед первой косой чертой иногда не содержала тире, например ), тогда используйте только /в качестве разделителя. разделитель,разделить третью косую черту -поле с разделителями на -и добавить второй бит результата в строку:

$ awk -F / '{ split($3,a,"-"); printf "%s %s\n", a[2], $0 }' file
YYY >hCoV-19/xxx/xxx-YYY/xxx
ZZZ >hCoV-19/xxx/xxx-ZZZ/xxx

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

$ sed 's/.*-\([^/]*\).*/\1 &/' file
YYY >hCoV-19/xxx/xxx-YYY/xxx
ZZZ >hCoV-19/xxx/xxx-ZZZ/xxx

или, если вы используете Plan9 или используете реализацию Plan9 sed, которая имеет проблемы с /внутри выражения в квадратных скобках, используйте альтернативный набор разделителей для команды s///:

$ sed 's,.*-\([^/]*\).*,\1 &,' file
YYY >hCoV-19/xxx/xxx-YYY/xxx
ZZZ >hCoV-19/xxx/xxx-ZZZ/xxx

Используемое здесь регулярное выражение фиксирует подстроку, не содержащую /символов после последнего -в строке. Затем он добавляет к строке эту захваченную подстроку и пробел.

Обратите внимание, что основное различие между этим решением sedи решением awkзаключается в том, что код awkиспользует структуру каждой строки, подобную полю -, в то время как код sedболее " sloppy", просто ищет строку символов без косой черты -после тире.


Сайт https://regexr.com/в настоящее время поддерживает регулярные выражения JavaScript и Perl -совместимые регулярные выражения (PCRE ). Вы не используете здесь ни один из этих двух языков, поэтому все, что говорит вам сайт, может не работать. awkиспользует расширенные регулярные выражения POSIX (ERE )и большинство других стандартных инструментов Unix для работы с текстом, включая sed, использует базовые регулярные выражения POSIX (BRE ).

См. также Почему мое регулярное выражение работает в X, но не в Y?

2
28.04.2021, 22:57

Теги

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