我们如何按照特定模式从文件中的行中删除字符串?
how can we remove string from rows in a file following a particular pattern?
我有一个包含许多同名行的纯文本文件:
./intuit
./intuit/apac-trial13
./safenetdatasecurityisraelltd3
./safenetdatasecurityisraelltd3/ldk-emea-eval
我想从所有行中删除 ./
还有
./intuit
./safenetdatasecurityisraelltd3
我可以从所有行和没有子目录的行中删除 ./
的任何 unix 命令
$ sed -n 's@^\./@@; /\// p' test.txt
intuit/apac-trial13
safenetdatasecurityisraelltd3/ldk-emea-eval
我们在那里做了什么? sed -n
表示 "don't print unless I say so." 然后,s@^\./@@
删除前导 ./
(如果存在)。最后,我们用 /
匹配任何行(适当转义),并用 p
.
打印它
在 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 中,您可以使用 |
将一个命令的输出作为输入传递给其他命令。
我有一个包含许多同名行的纯文本文件:
./intuit
./intuit/apac-trial13
./safenetdatasecurityisraelltd3
./safenetdatasecurityisraelltd3/ldk-emea-eval
我想从所有行中删除 ./
还有
./intuit
./safenetdatasecurityisraelltd3
我可以从所有行和没有子目录的行中删除 ./
的任何 unix 命令
$ sed -n 's@^\./@@; /\// p' test.txt
intuit/apac-trial13
safenetdatasecurityisraelltd3/ldk-emea-eval
我们在那里做了什么? sed -n
表示 "don't print unless I say so." 然后,s@^\./@@
删除前导 ./
(如果存在)。最后,我们用 /
匹配任何行(适当转义),并用 p
.
在 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 中,您可以使用 |
将一个命令的输出作为输入传递给其他命令。