Поскольку вы пометили macos
, я не уверен, будет ли это работать для вас. Я проверил это на GNU awk
$ awk '{gsub(/\<[0-9a-f]\>/, "0&", $2)} 1' ip.txt
10.5.96.41 00:00:0e:4c:b7:42
10.5.96.42 c4:f7:00:13:ef:32
10.5.96.43 00:e8:4c:60:2b:42
10.5.96.44 00:6a:bf:0b:35:f1
awk
хорошо для обработки поля, здесь вы можете просто выполнить замену только для второго поля
Но, я вижу \b
и \w
с вашей командой sed
, значит, вы используете GNU sed
? Если это так,
sed -E ':a s/( .*)(\b\w\b)/\10\2/; ta' ip.txt
С perl
$ perl -lane '$F[1] =~ s/\b\w\b/0$&/g; print join " ", @F' ip.txt
10.5.96.41 00:00:0e:4c:b7:42
10.5.96.42 c4:f7:00:13:ef:32
10.5.96.43 00:e8:4c:60:2b:42
10.5.96.44 00:6a:bf:0b:35:f1
Если вы хотите предпринять приключения, укажите, что вы хотите избежать замены первого поля:
perl -pe 's/^\H+(*SKIP)(*F)|\b\w\b/0$&/g' ip.txt