Удалить строку из строки, которая соответствует регулярному выражению с AWK - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть файл, который содержит много подобных данных, и я должен удалить все, что соответствует этому регулярному выражению [-]+\d+(.*)

Ввод:

zxczxc-6-9hw7w
qweqweqweqweqwe-18-8c5r6
asdasdasasdsad-11-br9ft

Вывод должен быть:

zxczxc
qweqweqweqweqwe
asdasdasasdsad

Как я могу сделать это с AWK?

Ответы [ 3 ]

3 голосов
/ 06 апреля 2020

sed может быть проще ...

$ sed -E 's/-+[0-9].*//' file

обратите внимание, что .* охватывает +.*

3 голосов
/ 06 апреля 2020

AFAIK awk не поддерживает \d, поэтому вы можете использовать [0-9], ваше регулярное выражение является верным, единственное, что вам нужно, чтобы поставить его в правильную функцию awk.

awk '{sub(/-+[0-9].*/,"")} 1'  Input_file

Вам не нужен дополнительный знак после [0-9], поскольку он покрывается .*

0 голосов
/ 07 апреля 2020

Как правило, если вы хотите удалить строку , которая соответствует регулярному выражению, тогда все, что вам нужно сделать, это заменить ее пустой строкой. Наиболее простое решение - sed, которое представлено karafka , другое решение использует awk, как представлено RavinderSingh13 .

Общий синтаксис будет выглядеть вот так:

sed -e 's/ere//g' file
awk '{gsub(/ere/,"")}1' file

с ere представлением регулярного выражения. Заметьте, что я использую g и gsub здесь для замены всех непересекающихся строк .

Из-за природы регулярного выражения в OP, т.е. оно заканчивается на .* g можно отбросить. Это также позволяет нам написать другое решение awk, которое работает с разделителями полей:

awk -F '-+[0-9]' '{print $1}' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...