我想用包含每个可能字符的字符串替换%foo%
(在文件测试中找到)。由于缺少字符限制,以下是不可能的(在BASHv4中执行):
echo %foo% > test
replacement="//this//is//a//test"
ed -s test <<< "g/%foo%/s/%foo%/$replacement"
知道如何用所有可能的文本替换%foo%
吗?
答案 0 :(得分:1)
我保证猜测你会通过每个前缀反斜杠转义斜杠和反斜杠来接近你的目标。 AFAIK无法在一步中完成bash,因此您可以编写一个函数使其可读,或者享受您的倾斜牙签森林之旅:
$ echo %foo% > test
$ replacement="//this//is//a\\\\//test"
$ echo $replacement
//this//is//a\\//test
$ stage1=${replacement//\\/\\\\}
$ echo $stage1
//this//is//a\\\\//test
$ stage2=${stage1//\//\\\/}
$ echo $stage2
\/\/this\/\/is\/\/a\\\\\/\/test
$ ed -s test <<< g/.*foo.*/s/foo/$stage2/p
%//this//is//a\\//test%
Newlines仍然存在问题,但是你不想将它们保存在bash环境变量中,因为空格不是很稳定。
答案 1 :(得分:0)
使用命令r
可以从另一个文件加载文本,因此以下是有效的解决方案:
r FILE