我有一个包含目录名称和其他一些信息的文件,但名字总是先出现。文件如下:
/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
答案 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