Вы можете использовать границу слова \b
для обозначения начала или конца слова, и дополнительно нужно учитывать, что 0x
возможен перед числом:
sed -E 's/\b(0x|)[0-9a-fA-F]{8}\b/\100000000/g'
Тем не менее,есть частные случаи, которые нужно продумать, что с ними делать, например 00x12345678
, в приведенном выше шаблоне он не заменяется.
$ 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-файлах ).