我在文件中只有几行代码 (代码几乎没有新行,制表符,字符串和模式字符串)
我希望将此文件内容作为字符串值, 这样它就可以作为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发送代码内容,那么这就像一个常见的用例
答案 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)")"