bash:文件内容到字符串var,保留格式,包括char转义(如果需要)

时间:2017-05-11 19:31:04

标签: bash sed

我在文件中只有几行代码 (代码几乎没有新行,制表符,字符串和模式字符串)

我希望将此文件内容作为字符串值, 这样它就可以作为json中某个参数的字符串值发送 {param1:" value1",代码:"代码内容 - 来自文件 - 应该去这里"}

假设文件内容为

function string.urlDecode(str)
  if string.isEmpty(str) then return str end
  str = string.gsub(str, "+", " ")
  str = string.gsub(str, "%%(%x%x)", function(h) return string.char(tonumber(h, 16)) end)
  str = string.gsub(str, "\r\n", "\n")
  return str
end

应转换为(我在这里看到的是换行符,标签,一般代码格式保存," \ etc被转义)

function string.urlDecode(str)\n  if string.isEmpty(str) then return str end\n  str = string.gsub(str, \"+\", \" \")\n  str = string.gsub(str, \"%%(%x%x)\", function(h) return string.char(tonumber(h, 16)) end)\n  str = string.gsub(str, \"\\r\\n\", \"\\n\")\n  return str\nend

这样json就变成了

{param1: "value1", code: "function string.urlDecode(str)\n  if string.isEmpty(str) then return str end\n  str = string.gsub(str, \"+\", \" \")\n  str = string.gsub(str, \"%%(%x%x)\", function(h) return string.char(tonumber(h, 16)) end)\n  str = string.gsub(str, \"\\r\\n\", \"\\n\")\n  return str\nend"}

虽然可以以上述方式将文件内容转换为字符串 使用sed(从少数相关的slackoverflow线程获得,如How can I replace a newline (\n) using sed?), 但我必须处理每个场景,如换行符,制表符,",\,如果还有其他需要转义的特殊字符(我不知道)

是否有任何bash命令(或者python模块)可以处理从文件到字符串转换的代码内容的所有这些场景?

如果有人想要用JSON发送代码内容,那么这就像一个常见的用例

1 个答案:

答案 0 :(得分:1)

如果内容在file.txt

function encode {
    local input=$1
    local output
    for ((i=0;i<${#input};i+=1)); do
        ic=${input:$i:1}
        if [[ $ic = $'\n' ]]; then
            oc='\n'
        elif  [[ $ic = '\' || $ic = '"' ]]; then
            oc='\'$ic
        # [[ $ic < $'\040' ]] # works only if LC_COLLATE=C or LC_ALL=C
        elif (( $(printf "%d" "'$ic") < 32 )); then
            oc='\0'$(printf "%02o" "'$ic")
        else
            oc=$ic
        fi
        output=$output$oc
    done
    echo "$output"
}

printf '{param1: "%s", code: "%s"}' "value1" "$(encode "$(<file.txt)")"