Shell-Script

CRLF上的Sed替換不起作用

  • March 16, 2020

輸入:

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

引用自:https://unix.stackexchange.com/questions/573145