Shell-Script
CRLF上的Sed替換不起作用
輸入:
bharti+bharti-ims+bharti-sdm+RuleForBhartiOnlyIndices+kibana_user
期望的輸出:
"bharti","bharti-ims","bharti-sdm","RuleForBhartiOnlyIndices","kibana_user"
命令:
echo "bharti+bharti-ims+bharti-sdm+RuleForBhartiOnlyIndices+kibana_user" | sed -e 's/^/"/g' -e 's/+/","/g' -e 's/$/\"/g'
這工作正常,並且在行終止符為 LF 的情況下獲得了所需的輸出。一旦我在 Windows 中編輯文件並保存它,行終止符 LF 就會被 CRLF 替換。最後一個我替換行尾的 sed 表達式
$
失敗"
並得到意外結果。意外結果:"bharti","bharti-ims","bharti-sdm","RuleForBhartiOnlyIndices","kibana_user
看看最後的失踪
"
。請任何可以來救我的 sed 專家:)。
報價實際上是存在的,但它在列印到螢幕時取代了初始報價:
$ printf '%s\r\n' 'foo' | sed -e 's/^/"/g' -e 's/+/","/g' -e 's/$/\"/g' | od --format c 0000000 " f o o \r " \n 0000007
\r
/CR/輸入,將用於輸出文本的虛擬游標的位置移動到行首,因此最終"
會覆蓋(僅在終端中)第一個引號。您可能希望先發送輸入
dos2unix
,除非您願意添加sed
表達式來處理\r
。