2016-07-15 60 views
0

這個問題聽起來像是重複的,但我認爲它與我找到的頁面不同。我試圖將一個文本文件的內容分配給一個bash變量,但是我希望將「\ n」字符作爲一個字符串包含進來,而不是實際在新行中看到它。例如,文件的內容是這個樣子:從字符串文字中賦值變量newline

這裏是文本文件的內容

有多種線路

等等等等

我想下面的變量「text_file」將被分配文件的內容,所以當我在腳本中使用它時,它看起來像這樣:

這裏是文本文件\ nThere的內容是多行\ nblah等等等等

我使用下面的腳本這個變量,我得到這個錯誤,我相信這是一個結果我分配給變量的「hello.txt」文件中的換行符。

錯誤解析參數 '--message':無效的JSON:無效的控制字符U '\ N' 在:

subject="Test Email Sent Via AWS" 
message="here is the message to the user...\n\n" 
text_file=`cat hello.txt` 
full_message="$message$text_file" 

cat <<EOF > generated_message.json 
{ 

    "Subject": { 
     "Data": "$subject", 
     "Charset": "UTF-8" 
    }, 
    "Body": { 
     "Text": { 
      "Data": "$full_message", 
      "Charset": "UTF-8" 
     } 
    } 
} 
EOF 
aws ses send-email --profile sendmail --from [email protected] --destination file://destination.json --message file://generated_message.json 

我想我失去了一些東西基本的,但我可以」弄明白了。先謝謝您的幫助。

+0

我不認爲這是一個重複的問題,但它確實給了我一些關於可能導致問題的附加信息。因此,如果我在該文章中正確理解了這些回覆,那麼在JSON中就不能有「\ n」字符,並且需要使用額外的反斜槓進行轉義?如果是這樣,是否意味着我需要替換原來的所有換行符「你好。txt「文件加上」\\ n「來解決? – syang

回答

1

不要試圖用傳統的Unix工具將有效的JSON放在一起;使用專爲JSON設計的工具,如jq

subject="Test Email Sent Via AWS" 
message="here is the message to the user..." 

jq -R --slurp \ 
    --arg message "$message" \ 
    --arg subject "$subject" '{ 
     "Subject": { 
      "Data": $subject, 
      "Charset": "UTF-8" 
     }, 
     "Body": { 
      "Text": { 
       "Data": ($message + "\n\n" + @text), 
       "Charset": "UTF-8" 
      } 
     } 
    }' <hello.txt> generated_message.json 

-R--slurp確保hello.txt內容直接傳遞給@text功能,確保文本正確引述JSON字符串。將消息和主題作爲變量傳遞,而不是直接將它們嵌入到過濾器參數中,以確保它們也可以正確編碼。

0

內容的text_file

Here is the content of the text file 
There are multiple lines 
blah blah blah 

預計ouptut

Here is the content of the text file\nThere are multiple lines\nblah blah blah 

你可能會做

declare -a file_as_array 
while read line 
do 
file_as_array+=("${line/%/\\n}") 
done<text_file 
file_as_text="$(sed 's/\\n /\\n/g' <<<"${file_as_array[@]}")" 
unset file_as_array 
echo "$file_as_text" 

實際輸出

Here is the content of the text file\nThere are multiple lines\nblah blah blah\n 
+0

通過數組的間接方式是什麼?只需'file_as_text = $(perl -pe's/\ n/\\ n /'text_file)'應該可以解決這個問題。 – tripleee