如何从包含变量中某个模式值的文件中删除一行?

时间:2018-03-20 10:33:34

标签: bash file sed

我有一个包含目录名称和其他一些信息的文件,但名字总是先出现。文件如下:

/home/user/Desktop/IS/proj_1/sch/text 4 2018-03-14 07:41:01
/home/user/Desktop/IS/file1.txt 3 2018-03-14 16:50:01
...

我有一个变量" name"包含这个例如:

/home/user/Desktop/IS/file1.txt

我需要以某种方式从文件中删除该特定行。我搜索过很多帖子并尝试使用各种引用和扩展方式,但没有做到这一点。如果我直接键入它,它会毫无问题地删除该行,但我很难从变量中执行此操作。这就是我想出的,但它仍然没有用。

sed -i '/"$name"/d' $File_name

3 个答案:

答案 0 :(得分:1)

sed命令不允许基于纯字符串的搜索,仅使用正则表达式(BRE或ERE)执行搜索。这需要在搜索模式中转义所有特殊的正则表达式元字符。

最好使用awk :

非正则表达式方法
name='/home/user/Desktop/IS/file1.txt'
awk -v p="$name" '!index($0, p)' file

/home/user/Desktop/IS/proj_1/sch/text 4 2018-03-14 07:41:01

答案 1 :(得分:1)

试试这个:

sed -i "\|$name|d" "$File_name"

正如您所看到的,我更改了|的分隔符,您可以根据需要从大多数ascii字符中选择另一个(不是所有作品)

答案 2 :(得分:1)

单引号中的任何内容都不会扩展。

尝试:

sed -i "/$name/d" $File_name

如果您遇到/有问题,请正确使用它们。

name=$(echo "$name"|sed -e "s/\//\\\\\//g")
sed -i "/$name/d" $File_name