这基本上可以归结为“如何结合使用 pwd 和 sed delete(或替代方法)”。给定一个包含文件路径列表的文件,如何删除包含当前目录的行?
因此,如果 file1 包含:
/dirA/subdir1/somefile
/dirB/subdir2/somefile
/dirB/subdir2/somefile
/dirC/subdir2/somefile
/dirD/subdir1/somefile
我的工作目录是:
/dirB/subdir2/
然后我的输出应该就地编辑 file1 以得到以下结果:
/dirA/subdir1/somefile
/dirC/subdir2/somefile
/dirD/subdir1/somefile
我知道我可以用以下命令删除行:
sed '/pattern to match/d' file1
我可以像这样将 pwd 输入 sed:
sed 's?#REPLACE-WITH-PATH?'`pwd`'?'
所以我认为我可以将它们组合为以下之一:
sed '/'`pwd`'/d' file1
sed '?'`pwd`'?d' file1
sed '#'`pwd`'#d' file1
第一个选项无法正确读取,因为它将路径的斜杠解释为 sed 命令的一部分。第二个选项无法识别问号。第三个选项可以运行,但不会执行任何操作。