这基本上可以归结为“如何组合 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 命令的一部分。 第二个不认识问号。 第三个运行,但没有做任何事情。
从
/.../d
切换到 \|...|d
或 \#...#d
,因为当前目录包含 /
。