sed /行尾$ /模式匹配不适用于在变量值中包含/的shell变量

时间:2018-11-06 05:37:19

标签: bash sed

已声明变量

var1=/home/jrajpal/sync_dir
var2=/test/

我的输入文件示例

cat test.txt
/home/jrajpal/sync_dir/ server1.example.com:/rsync/LegADC-LLG02_dst/home/jrajpal/sync_dir
/home/jrajpal/sync_dir/test/ server1.example.com:/rsync/LegADC-LLG02_dst/home/jrajpal/sync_dir/test
/home/jrajpal/sync_dir/test1/ server1.example.com:/rsync/LegADC-LLG02_dst/home/jrajpal/sync_dir/test1

sed "s#$var1#& $var2#2" /home/jrajpal/test.txt

在上面的命令中运行以搜索确切的模式并替换为之时,它将捕获所有3行并进行替换,而我只需要匹配文件中的第一行,但行尾$模式不起作用

sed "s#$var1\$#& $var2#2" /home/jrajpal/test.txt-->此命令未按预期执行,文件输出保持不变

/home/jrajpal/sync_dir/ server1.example.com:/rsync/LegADC-LLG02_dst/home/jrajpal/sync_dir
/home/jrajpal/sync_dir/test/ server1.example.com:/rsync/LegADC-LLG02_dst/home/jrajpal/sync_dir/test
/home/jrajpal/sync_dir/test1/ server1.example.com:/rsync/LegADC-LLG02_dst/home/jrajpal/sync_dir/test1

1 个答案:

答案 0 :(得分:3)

sed "s#$var1\$#& $var2#2"
#                      ^

问题是2结尾。它告诉sed仅替换每行中的第二个匹配项。

但是$仅在行尾匹配,因此此模式只能在每行开头匹配一次。

换句话说,您要让sed查找每行的第二行,这没有任何意义。

sed "s#$var1\$#& $var2#"

应该修复它。