匹配模式并将以下值写入变量

匹配模式并将以下值写入变量

我正在尝试匹配一个模式,然后提取以下信息来使用该变量创建一个文件。

示例(我的数据可能类似于这两个示例中的任何一个)

"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

相关内容