Bash
使用 sed 附加包含轉義字元的字元串
目前我使用:
sed -i -e "5a\\ ${text}" $filename
將某些內容附加到某一行,其中變數 text 包含一個字元串,例如“\epsilon”。
使用時
echo -E $text
字元串顯示得很好,但是當我在傳遞給的字元串中展開它時
sed
,所有轉義字元都會被展開,結果不是我想要的。如何讓 sed 使用該字元串的原始內容而不轉義任何內容?
sed 命令
a\
解釋轉義,因此您需要在插入的字元串中複製反斜杠。嘗試這個:sed -e "5a\\ $(echo -E "$text" | sed -e 's/\\/\\\\/g')"
報價很棘手。我建議使用不需要您添加額外引號的工具,例如 awk 或 perl。這兩個工具允許您在命令行或環境中傳遞參數,並在文本操作中使用它們。使用 Perl:
export text perl -i -pe '$_ .= "$ENV{text}\n" if $. == 5' "$filename"
使用 awk,您需要手動移動文件:
tmp=$(TMPDIR=$(dirname -- "$filename") mktemp) awk -v text="$text" '{print} NR==5 {print text}' <"$filename" >"$tmp" && mv -- "$tmp" "$filename"