请尽可能帮助。 我想重建文件try.txt
try.txt包含:
uid: random1
sn: 8
uid: random2
sn:: SGVsbG8sIFdvcmxkIQo=
到此:
random1 8
random2 Hello, World!
问题出在Base64上。什么是解码它的最好和可能的方法?
1)逐行搜索try.txt并在匹配的字符串上解码
这可能与awk有关,还是这种一厢情愿的想法?
这不起作用 - > cat try.txt | awk '{if ($1 == "sn::") base64 -d $2'
2)逐行搜索sn.txt并在匹配字符串上解码
path=/dev/shm
uidf=$path/uid.txt
snf=$path/sn.txt
ff=$path/ff.txt
通过$ snf搜索不同的Base64编码文本的一些代码
你能帮忙吗?
图2a)
cat try.txt | grep -v dn:| awk'/ uid / {print $ 2}'> $ UIDF
cat try.txt | grep -v dn:| awk'/ sn / {print $ 2}'> $ SNF
这里有一些代码用于搜索base64编码的字符串并对其进行解码
paste $uidf $snf | awk '{print $1,$2}' > $ff
2b)的 cat try.txt | grep -v dn:| awk'{print}'
case "$string" in
"sn::" ) base64 -d $string;;
esac
答案 0 :(得分:3)
这个单行可以给你想要的东西:
awk -v RS="" '$3=="sn::"{"base64 -d<<< \""$4"\""|getline $4}{print $2,$4}' file
在上面的命令中,getline
用于从外部cmd(base64)获取输出。
使用您的文件进行测试:
kent$ cat f
uid: random1
sn: 8
uid: random2
sn:: SGVsbG8sIFdvcmxkIQo=
kent$ awk -v RS="" '$3=="sn::"{"base64 -d<<< \""$4"\""|getline $4}{print $2,$4}' f
random1 8
random2 Hello, World!
答案 1 :(得分:0)
试试这个:
awk '/^uid: /{printf $2" "}/^sn: /{print $2}/^sn:: /{print $2|"base64 --decode"}'
答案 2 :(得分:-3)
在你的第一个变种中:
cat try.txt | awk '{if ($1 == "sn::") base64 -d $2'
使用substr(index($0, $2))
代替$2
。
对于不匹配的行,您还需要“else”。