我有一个明文文件,其中有许多行具有相同的名称:
./intuit
./intuit/apac-trial13
./safenetdatasecurityisraelltd3
./safenetdatasecurityisraelltd3/ldk-emea-eval
我想从所有行中删除./
还有
./intuit
./safenetdatasecurityisraelltd3
任何unix命令,在没有子目录的情况下,我可以从所有行和行中删除./
答案 0 :(得分:1)
$ sed -n 's@^\./@@; /\// p' test.txt
intuit/apac-trial13
safenetdatasecurityisraelltd3/ldk-emea-eval
我们在那里做了什么? sed -n
说“除非我这样说,否则不要打印。”然后,s@^\./@@
会移除前导./
(如果存在)。最后,我们将所有行与/
匹配(适当转义),并使用p
打印。
答案 1 :(得分:1)
在UNIX中,您始终可以组合多个命令来完成任务。
正如您所提到的,首先您要从每行中删除前导./
。因此,使用sed
来替换前导./
:
$ sed 's:^\./::' input.txt
intuit
intuit/apac-trial13
safenetdatasecurityisraelltd3
safenetdatasecurityisraelltd3/ldk-emea-eval
然后,接下来要做的就是列出包含子目录的行。现在,为了确定行是否有子目录,一种方法是查看它是否有/
。
$ sed 's:^\./::' input.txt | grep '/'
intuit/apac-trial13
safenetdatasecurityisraelltd3/ldk-emea-eval
在UNIX中,您可以使用|
将一个命令的输出作为输入传递给其他命令。