Сопоставьте Pattern и запишите следующее значение как переменную

Я пытаюсь сопоставить шаблон, а затем получить следующую информацию, чтобы создать файл с использованием этой переменной.

Пример (мои данные могут выглядеть как один из двух примеров)

"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"

В основном я пытаюсь создать новый файл с именем в качестве имени файла. Так, в примере 1 действительно длинное имя файла с пробелами и переносами, в примере 2 короткое имя файла. Пример 1 идентифицируется как "tfilename", а пример 2 "имя файла".

Очевидно, мне не нужны двойные кавычки.

Кто-нибудь может помочь с этим, пожалуйста?

Спасибо!

1 ответ

Я хотел бы рассмотреть возможность использования языка, который может анализировать JSON и манипулировать данными. Вот какой-то рубин (и оболочка)

$ 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
Другие вопросы по тегам