нужна помощь в сопоставлении с шаблоном для определенного столбца и обновление другого, найденного с помощью awk

Вы можете использовать границу слова \bдля обозначения начала или конца слова, и дополнительно нужно учитывать, что 0xвозможен перед числом:

sed -E 's/\b(0x|)[0-9a-fA-F]{8}\b/\100000000/g'

Тем не менее,есть частные случаи, которые нужно продумать, что с ними делать, например 00x12345678, в приведенном выше шаблоне он не заменяется.

1
09.06.2020, 12:12
1 ответ
$ awk -F, 'BEGIN { OFS=FS } FNR == 1 { print; next } /[iI]p/ && /[aA]ddress/ && !/[sS]hip/ { $3 = "IP address"; print }' file
_id,field_name,field_friendly_name,purpose_of_use,category
1,customer_ip_address_nbr,IP address,Ab,cd
2,customer_ipaddress,IP address,Ab,cd
3,customer_ipaddress,IP address,Ab,cd
6,Ipaddress,IP address,Ab,cd

Безусловная печать первой строки из файла.

Затем он проверяет несколько шаблонов, удостоверяясь, что разрешено изменение регистра начального символа. Проверка для Shipи shipвыполняется таким образом, что истинно , если шаблон не соответствует !).

Если строка проходит все тесты, обновляется ее 3-й столбец и печатается измененная строка.

Если подстроки, которые мы хотим сопоставить, должны сопоставляться во 2-м столбце только , тогда выполните тесты на содержимом этого столбца:

awk -F, '
    BEGIN    { OFS=FS }
    FNR == 1 { print; next }
    $2 ~ /[iI]p/ && $2 ~ /[aA]ddress/ && $2 !~ /[sS]hip/ {
        $3 = "IP address"
        print
    }' file

Обратите внимание на использование !~в последнем тесте.

Все это предполагает, что входной файл ifle представляет собой простой CSV-файл , т. е. ни одно поле не содержит встроенной запятой или символа новой строки (, которые разрешены в правильно цитируемых полях в CSV-файлах ).

1
18.03.2021, 23:29

Теги

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