过滤掉文本以删除目录并仅保留文件

时间:2017-12-18 11:50:53

标签: bash

在此文件上运行以下命令grep -r "TESTPROGS/" /home/am/test.txt

AMPROGS/
AMPROGS/TqaWhkhiCx8ymy8lIR2p.SH
AMPROGS/iOryQxYtZwhkl0x7CcmW.SH
AMPROGS/a14KbHWjbnWehzkmDWuv.SH
TESTPROGS/
TESTPROGS/HRH7B76fogxwX6zEe7w8.SH
TESTPROGS/m0np3yEbpplqk36wVJ1l
TESTPROGS/t8ZCuJMgZO9accbjoDnp

返回以下结果:

TESTPROGS/
TESTPROGS/HRH7B76fogxwX6zEe7w8.SH
TESTPROGS/m0np3yEbpplqk36wVJ1l
TESTPROGS/t8ZCuJMgZO9accbjoDnp

我现在如何彻底删除TESTPROGS /所以我有这个:

HRH7B76fogxwX6zEe7w8.SH
m0np3yEbpplqk36wVJ1l
t8ZCuJMgZO9accbjoDnp

4 个答案:

答案 0 :(得分:5)

使用awk

awk -F'/' '$1=="TESTPROGS" && $2 != "" {print $2}' /home/am/test.txt

-F/将输入行拆分为由/分隔的字段。 $1=="TESTPROGS"检查第一个字段是否等于TESTPROGS。如果这是真的并且第二个字段不为空,则打印第二个字段。

答案 1 :(得分:4)

Wuith GNU grep:

grep -Po 'TESTPROGS/\K.*' /home/am/test.txt

输出:

HRH7B76fogxwX6zEe7w8.SH
m0np3yEbpplqk36wVJ1l
t8ZCuJMgZO9accbjoDnp
  

\K:丢弃已匹配的部分

答案 2 :(得分:3)

awk '/TESTPROGS\/.+/' file

TESTPROGS/HRH7B76fogxwX6zEe7w8.SH
TESTPROGS/m0np3yEbpplqk36wVJ1l
TESTPROGS/t8ZCuJMgZO9accbjoDnp

awk -F'/' '/TESTPROGS\/.+/{print $2}' filterout.awk

HRH7B76fogxwX6zEe7w8.SH
m0np3yEbpplqk36wVJ1l
t8ZCuJMgZO9accbjoDnp

答案 3 :(得分:1)

另一种方式:

for line in $(grep -r "TESTPROGS/" /home/am/test.txt); do basename "${line}"; done