我正在尝试匹配一个模式,然后提取以下信息来使用该变量创建一个文件。
示例(我的数据可能类似于这两个示例中的任何一个)
"headers": {
"content-type": "application/octet-stream;\r\n\tname=\"I may have long file names - With lots of spaces.zip\"",
"content-transfer-encoding": "base64",
"content-disposition": "attachment;\r\n\tfilename=\"I may have long file names - With lots of spaces.zip\""
或者
"headers": {
"content-type": "application/octet-stream",
"content-transfer-encoding": "base64",
"content-disposition": "attachment; filename=tiny.exe"
基本上,我试图创建一个名为 filename 的新文件。因此,示例 1 的文件名很长,包含空格和连字符,示例 2 的文件名很短。示例 1 由 'tfilename' 标识,示例 2 由 'filename' 标识。
显然我不需要双引号。
有人可以帮忙吗?
谢谢!
答案1
我会考虑使用一种可以解析 JSON 并操作数据的语言。这里有一些 ruby(和 shell)
$ cat data.json
{
"headers": {
"content-type": "application/octet-stream;\r\n\tname=\"I may have long file names - With lots of spaces.zip\"",
"content-transfer-encoding": "base64",
"content-disposition": "attachment;\r\n\tfilename=\"I may have long file names - With lots of spaces.zip\""
}
}
$ filename=$(ruby -rjson -e '
data = JSON.parse(File.read(ARGV.shift))
m = data["headers"]["content-disposition"].match(/filename=(.+)$/m)
filename = m[1].gsub(/^"|"$/,"")
puts filename
' data.json)
$ echo "$filename"
I may have long file names - With lots of spaces.zip