我们如何从特定模式后的文件中的行中删除字符串?

时间:2015-01-09 06:46:29

标签: linux unix

我有一个明文文件,其中有许多行具有相同的名称:

./intuit
./intuit/apac-trial13
./safenetdatasecurityisraelltd3
./safenetdatasecurityisraelltd3/ldk-emea-eval

我想从所有行中删除./ 还有

./intuit
./safenetdatasecurityisraelltd3

任何unix命令,在没有子目录的情况下,我可以从所有行和行中删除./

2 个答案:

答案 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中,您可以使用|将一个命令的输出作为输入传递给其他命令。