关于使用sed删除指定行的问题

业务需求,要写一个脚本定期收集目录下的文件
涉及到一个去重的功能
cat 1.txt
/date/file1/x
/date/file1/y
/date/file1/z

j=/date/file1/x

sed "/$j/d" 1.txt

sed "/'$j'/d" 1.txt

如上 我想删除1.txt中 包含 /date/file/x的 行 ,使用上面的sed 命令都无法实现。 不知哪里不对。求指导!

首先 sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。

其实 / 是 sed的分割符号,因此如果匹配字符中包含 / 那么需要转义

所以,要删除包含 /date/file/x 的可以如下操作:

 sed '/\/data\/file\/x/d' 1.txt

上述语句结果被打印到屏幕上,文件本身并未被修改!。如果需要修改文件那么可以用下面的语句

 sed  -i '/\/data\/file\/x/d' 1.txt