signature:
0000 - 70 59 90 77 3b da 12 b5-94 7d ca 72 77 ee 5d pY.w;....}.rw.]
000f - 1f a6 6b 17 60 58 4b a3-09 83 55 f5 58 36 80 ..k.`XK...U.X6.
001e - 1d b8 40 6e d9 95 77 27-46 4c 87 14 45 9a 67 ..@n..w'FL..E.g
002d - 75 9c 55 a9 f7 1f e1 6e-f6 a7 21 9f 0a 87 96 u.U....n..!....
003c - dd 00 02 90 07 e0 e7 2c-c0 a3 bd 3b 8e 19 4a .......,...;..J
004b - a5 2f b3 e4 e6 f0 10 f1-01 0f 39 e5 9e 55 31 ./........9..U1
005a - d8 d8 88 13 b6 81 7a 53-f1 9a 1a f8 f6 6f ef ......zS.....o.
0069 - b5 9b 36 19 9e da 8b 09-97 f2 b4 55 c0 42 7a ..6........U.Bz
0078 - 27 11 6e aa fb 4d eb 40- '.n..M.@
unsignedAttrs:
我有一个签名文件,其中我需要找到两个字符串,如上例“签名”和“unsignedAttrs”是我需要两个字之间的数据,具有以下条件
1)找到与“签名”匹配的字符串的最后一次出现意味着“签名”字符串出现在我的文件的最后 2)找到后得到该块的数据 3)最终输出将是
70 59 90 77 3b da 12 b5-94 7d ca 72 77 ee 5d
1f a6 6b 17 60 58 4b a3-09 83 55 f5 58 36 80
1d b8 40 6e d9 95 77 27-46 4c 87 14 45 9a 67
75 9c 55 a9 f7 1f e1 6e-f6 a7 21 9f 0a 87 96
dd 00 02 90 07 e0 e7 2c-c0 a3 bd 3b 8e 19 4a
a5 2f b3 e4 e6 f0 10 f1-01 0f 39 e5 9e 55 31
d8 d8 88 13 b6 81 7a 53-f1 9a 1a f8 f6 6f ef
b5 9b 36 19 9e da 8b 09-97 f2 b4 55 c0 42 7a
27 11 6e aa fb 4d eb 40-
4)数据的大小可能会有所不同意味着可以提供更多的行或
我尝试使用awk命令获得以下输出,但是最后一行有多余字符导致问题
sed -n "/signature:/,/unsignedAttrs/p" $SIGNED_INFO > signer_signature.txt
if [ $? -eq 0 ]; then
echo OK
else
echo FAIL
fi
sed '1d; $d' signer_signature.txt > Signer_Signature_cert.txt
if [ $? -eq 0 ]; then
echo OK
else
echo FAIL
fi
rm -rf signer_signature.txt
awk '{$1=$2=$17=""; print $0}' Signer_Signature_cert.txt
70 59 90 77 3b da 12 b5-94 7d ca 72 77 ee 5d
1f a6 6b 17 60 58 4b a3-09 83 55 f5 58 36 80
1d b8 40 6e d9 95 77 27-46 4c 87 14 45 9a 67
75 9c 55 a9 f7 1f e1 6e-f6 a7 21 9f 0a 87 96
dd 00 02 90 07 e0 e7 2c-c0 a3 bd 3b 8e 19 4a
a5 2f b3 e4 e6 f0 10 f1-01 0f 39 e5 9e 55 31
d8 d8 88 13 b6 81 7a 53-f1 9a 1a f8 f6 6f ef
b5 9b 36 19 9e da 8b 09-97 f2 b4 55 c0 42 7a
27 11 6e aa fb 4d eb 40- '.n..M.@
如果您有更好的方法来获取数据,请告诉我们 如果你知道任何'sed'或'awk'命令选项,请告诉我
答案 0 :(得分:2)
直接在“$ SIGNED_INFO”文件上运行:
$ tac file | awk '/signature/{exit} f{$1=$2=$NF=""; print} /unsignedAttrs/{f=1}' | tac
70 59 90 77 3b da 12 b5-94 7d ca 72 77 ee 5d
1f a6 6b 17 60 58 4b a3-09 83 55 f5 58 36 80
1d b8 40 6e d9 95 77 27-46 4c 87 14 45 9a 67
75 9c 55 a9 f7 1f e1 6e-f6 a7 21 9f 0a 87 96
dd 00 02 90 07 e0 e7 2c-c0 a3 bd 3b 8e 19 4a
a5 2f b3 e4 e6 f0 10 f1-01 0f 39 e5 9e 55 31
d8 d8 88 13 b6 81 7a 53-f1 9a 1a f8 f6 6f ef
b5 9b 36 19 9e da 8b 09-97 f2 b4 55 c0 42 7a
27 11 6e aa fb 4d eb 40-
或只是awk:
$ awk '/unsignedAttrs/{f=0} f{$1=$2=$NF=""; rec = rec $0 ORS} /signature/{f=1; rec=""} END{printf "%s", rec}' file
70 59 90 77 3b da 12 b5-94 7d ca 72 77 ee 5d
1f a6 6b 17 60 58 4b a3-09 83 55 f5 58 36 80
1d b8 40 6e d9 95 77 27-46 4c 87 14 45 9a 67
75 9c 55 a9 f7 1f e1 6e-f6 a7 21 9f 0a 87 96
dd 00 02 90 07 e0 e7 2c-c0 a3 bd 3b 8e 19 4a
a5 2f b3 e4 e6 f0 10 f1-01 0f 39 e5 9e 55 31
d8 d8 88 13 b6 81 7a 53-f1 9a 1a f8 f6 6f ef
b5 9b 36 19 9e da 8b 09-97 f2 b4 55 c0 42 7a
27 11 6e aa fb 4d eb 40-
以上是基于我的理解,你在文件中有多个签名块,如果你只有一个,那么你需要的只是:
$ awk '/unsignedAttrs/{f=0} f{$1=$2=$NF=""; print} /signature/{f=1}' file
70 59 90 77 3b da 12 b5-94 7d ca 72 77 ee 5d
1f a6 6b 17 60 58 4b a3-09 83 55 f5 58 36 80
1d b8 40 6e d9 95 77 27-46 4c 87 14 45 9a 67
75 9c 55 a9 f7 1f e1 6e-f6 a7 21 9f 0a 87 96
dd 00 02 90 07 e0 e7 2c-c0 a3 bd 3b 8e 19 4a
a5 2f b3 e4 e6 f0 10 f1-01 0f 39 e5 9e 55 31
d8 d8 88 13 b6 81 7a 53-f1 9a 1a f8 f6 6f ef
b5 9b 36 19 9e da 8b 09-97 f2 b4 55 c0 42 7a
27 11 6e aa fb 4d eb 40-
答案 1 :(得分:0)
那怎么样?
# cat test | sed -n "/signature:/,/unsignedAttrs/p" | sed '1d;$d' | sed -r 's/.... - //g;s/(.*) .*/\1/g'
70 59 90 77 3b da 12 b5-94 7d ca 72 77 ee 5d
1f a6 6b 17 60 58 4b a3-09 83 55 f5 58 36 80
1d b8 40 6e d9 95 77 27-46 4c 87 14 45 9a 67
75 9c 55 a9 f7 1f e1 6e-f6 a7 21 9f 0a 87 96
dd 00 02 90 07 e0 e7 2c-c0 a3 bd 3b 8e 19 4a
a5 2f b3 e4 e6 f0 10 f1-01 0f 39 e5 9e 55 31
d8 d8 88 13 b6 81 7a 53-f1 9a 1a f8 f6 6f ef
b5 9b 36 19 9e da 8b 09-97 f2 b4 55 c0 42 7a
27 11 6e aa fb 4d eb 40-