我想用转义序列全局替换所有\n
换行符\n
,用其中两个字符替换所有'
单引号字符,''
如下所示:
function esc_foobar {
# Escapes any "'" single quotation character.
local -r esc_quot="s:':'':g"
# Escapes any "\n" new line character.
local -r esc_nl=':a;N;$!ba;s:\n:\\n:g'
# Escape everything in one sed run.
sed -- "$esc_quot;$esc_nl" foobar.txt
}
鉴于该foobar.txt
文件包含:
Foo's bar
Bar's foo
只有第一个'
单引号字符会加倍。
颠倒命令中的esc_quot
和替换的顺序即可起作用,即所有单引号字符都按预期加倍。esc_nl
sed
$esc_nl;$esc_quot
'
为什么会这样呢?
答案1
在深入研究 Sed 并特别尝试了解 Sed 的N
命令后,我想出了以下适合我的 Sed 小脚本:
sed -- '$!N;s:\n:\\n:g;'"s:':'':g"
我的问题中 Sed 脚本的第二个变体存在这样的问题:如果输入的行数恰好是奇数,它会保持最后一行不变。