在sed中使用nul字符而不是“/”

时间:2015-05-01 12:20:21

标签: bash sed

我想删除包含路径的文件中的一行。应该删除的路径存储在bash脚本中的变量中。

在某处,我读到允许文件名包含* nix系统上除“/”和“\ 0”之外的任何字符。 由于我不能为此目的使用“/”(我有路径),我想使用nul字符。

我尝试了什么:

#!/bin/bash

var_that_contains_path="/path/to/file.ext"

sed "\\\0$var_that_contains_path"\\0d file.txt > file1.txt #not working
sed "\\0$var_that_contains_path"\0d file.txt > file1.txt #not working

我该如何使这项工作?提前谢谢!

1 个答案:

答案 0 :(得分:0)

由于文件名可以包含至少十几个对sed具有特殊含义的不同字符(.^[,仅举几例),正确的方法是这样做是为了在搜索字符串中将它们全部转义:

Escape a string for a sed replace pattern

因此,对于搜索模式(在本例中为:路径),您需要以下表达式:

the_path=$(sed -e 's/[]\/$*.^|[]/\\&/g' <<< "$the_path")