SED / AWK / BASHは、拡張英数字で区切られたフィールドを「0」で埋めます。

SED / AWK / BASHは、拡張英数字で区切られたフィールドを「0」で埋めます。

1文字フィールドを2文字(0で埋められる)に拡張するには、正規表現の助けが必要です。 0-9、英数字フィールド。

一方:

echo $dhcp6_s46_cont_mapt 
0:5b:0:9:40:0:64:ff:9b:0:1:0:3:0:59:0:17:0:a:20:47:55:54:4c:36:26:0:6c:e1:80:e0:0:0:5d:0:4:1:0:0:0:

拡張:

00:5b:00:09:40:00:64:ff:9b:00:01:00:03:00:59:00:17:00:0a:20:47:55:54:4c:36:26:00:6c:e1:80:e0:00:00:5d:00:04:01:00:00:00:

次にコロン(:)を削除します。

updatedstring = ${dhcp6_s46_cont_mapt//:}

echo $updatedstring
005b0009400064ff9b000100 ... etc

私は答えが次のようになるべきだと思います: 's/ ([a-f0-9][a-f0-9][:])'|'s/([a-f0-9][:]) / 0 \1 /' < $dhcp6_s46_cont_mapt - 拡張検索に使用されます。

ベストアンサー1

すべてを(bash)シェルに保存したらどうでしょうか?

$ dhcp6_s46_cont_mapt='0:5b:0:9:40:0:64:ff:9b:0:1:0:3:0:59:0:17:0:a:20:47:55:54:4c:36:26:0:6c:e1:80:e0:0:0:5d:0:4:1:0:0:0:'

$ IFS=: read -a arr <<<"$dhcp6_s46_cont_mapt"    
$ printf -v updatedstring '%02x' "${arr[@]/#/0x}"

$ echo "$updatedstring"
005b0009400064ff9b0001000300590017000a204755544c3626006ce180e000005d000401000000

おすすめ記事