我有一个问题,我有一个文件 test.txt,其内容如下:
objectClass: CPM1
objectClass: CPM2
objectClass: CPM3
objectClass: CPM4
objectClass: CPZ
objectClass: CP04s
objectClass: CP0A
objectClass: CP11
entryDS: 1
nodeId: 21
createTimestamp: 20211014155438Z
modifyTimestamp: 20220313041228Z
MSISDN: 353834079137
IMSI: 272050103105233
NAM: 0
CDC: 1423
IMEISV:: U1RQJgAkQiE=
AUTHINFO: 0
CSP: 11
SUBSCSPVERS: 20
RSA: 20
SUBSRSAVERS: 19
APNID1: 4
每次找到文本 IMEISV:: 时,我都想用以下函数的结果替换该文件中 IMEISV:: 之后的值(在本例中为 U1RQJgAkQiE=):
base64 -d | od -t x8 -An | rev
如果我在 unix 中这样做,回声将是这样的:
echo U1RQJgAkQiE= | base64 -d | od -t x8 -An | rev
结果将是 3545056200422412
所以在文件的最后,值 U1RQJgAkQiE= 应该是 3545056200422412。像这样:
objectClass: CPM1
objectClass: CPM2
objectClass: CPM3
objectClass: CPM4
objectClass: CPZ
objectClass: CP04s
objectClass: CP0A
objectClass: CP11
entryDS: 1
nodeId: 21
createTimestamp: 20211014155438Z
modifyTimestamp: 20220313041228Z
MSISDN: 353834079137
IMSI: 272050103105233
NAM: 0
CDC: 1423
IMEISV:: 3545056200422412
AUTHINFO: 0
CSP: 11
SUBSCSPVERS: 20
RSA: 20
SUBSRSAVERS: 19
APNID1: 4
有人可以让我知道如何使用 sed/perl ...吗?我真的是unix的新手
怎么样
decode_base64
perlMIME
模块提供的位置,例如:sed 's/\(IMEISV::\)\(.*\)/echo -n \1" ";echo \2\| base64 -d \| od -t x8 -An\|rev /ge ' input.txt
诀窍是 e 开关。输出:
使用的一个想法
sed
是在sed
替换中执行上面的命令,printf
以打印到第一个匹配的组而无需换行。