Bash。替换为 sed。行尾问题
Bash. Replace with sed. End of line problem
我正在尝试使用 sed 在文件中搜索和替换。但是 sed 似乎讨厌行尾特殊字符。
text=$(shuf text.txt)
echo "This is text:
$text"
sed -i "s~%text%~$text~g" t.txt
这是我得到的:
This is text:
line 2
line 1
line 3
line 4
sed: -e expression #1, char 15: unterminated `s' command
我尝试用 \r 替换 \n 但结果一点都不令人满意。
有一个选项可以执行 tr '\n' , '$' 然后再向后执行,但它似乎不正确。
帮忙?
使用 sed 和 bash
由于您正在使用 bash,请尝试:
sed -i "s~%text%~${text//$'\n'/\n}~g" t.txt
${text//$'\n'/\n}
是 bash 的 模式替换 的一个例子。
在这种情况下,它将所有换行符替换为反斜杠后跟 n
,sed
将解释为换行符。
例子
考虑这个 text
变量:
$ echo "$text"
line 2
line 1
line 3
line 4
这个输入文件:
$ cat t.txt
start
%text%
end
现在,运行我们的命令:
$ sed "s~%text%~${text//$'\n'/\n}~g" t.txt
start
line 2
line 1
line 3
line 4
end
要改文件in-place,当然把-i
选项加回去
使用 awk
使用与上面相同的 text
变量和 t.txt
文件:
$ awk -v new="$text" '{gsub(/%text%/, new)} 1' t.txt
start
line 2
line 1
line 3
line 4
end
我正在尝试使用 sed 在文件中搜索和替换。但是 sed 似乎讨厌行尾特殊字符。
text=$(shuf text.txt)
echo "This is text:
$text"
sed -i "s~%text%~$text~g" t.txt
这是我得到的:
This is text:
line 2
line 1
line 3
line 4
sed: -e expression #1, char 15: unterminated `s' command
我尝试用 \r 替换 \n 但结果一点都不令人满意。 有一个选项可以执行 tr '\n' , '$' 然后再向后执行,但它似乎不正确。
帮忙?
使用 sed 和 bash
由于您正在使用 bash,请尝试:
sed -i "s~%text%~${text//$'\n'/\n}~g" t.txt
${text//$'\n'/\n}
是 bash 的 模式替换 的一个例子。
在这种情况下,它将所有换行符替换为反斜杠后跟 n
,sed
将解释为换行符。
例子
考虑这个 text
变量:
$ echo "$text"
line 2
line 1
line 3
line 4
这个输入文件:
$ cat t.txt
start
%text%
end
现在,运行我们的命令:
$ sed "s~%text%~${text//$'\n'/\n}~g" t.txt
start
line 2
line 1
line 3
line 4
end
要改文件in-place,当然把-i
选项加回去
使用 awk
使用与上面相同的 text
变量和 t.txt
文件:
$ awk -v new="$text" '{gsub(/%text%/, new)} 1' t.txt
start
line 2
line 1
line 3
line 4
end