在 RedHat 7.7 中使用 grep

Using grep with RedHat 7.7

ls * 输出:

dossier_1:
vc.all.2019.09.17.Tue.gz  vc.all.2019.09.19.Thu.gz  vc.all.2019.09.21.Sat.gz  vc.all.2019.09.22.Sun.gz  vc.all.2019.09.24.Fri.gz
vc.all.2019.09.18.Wed.gz  vc.all.2019.09.20.Fri.gz  vc.all.2019.09.22.Sun     vc.all.2019.09.23.Mon     vc.all.2019.09.25.Wed.gz

dossier_2:
vc.all.2019.09.17.Tue.gz  vc.all.2019.09.18.Wed.gz  vc.all.2019.09.19.Thu.gz  vc.all.2019.09.20.Fri.gz  vc.all.2019.09.21.Sat.gz  vc.all.2019.09.22.Sun  vc.all.2019.09.22.Sun.gz  vc.all.2019.09.23.Mon

dossier_3:
vc.all.2019.09.17.Tue.gz  vc.all.2019.09.18.Wed.gz  vc.all.2019.09.19.Thu.gz  vc.all.2019.09.20.Fri.gz  vc.all.2019.09.21.Sat.gz  vc.all.2019.09.22.Sun  vc.all.2019.09.22.Sun.gz  vc.all.2019.09.23.Mon

如果我这样做

ls * | grep -v "gz"

在我的目录中,我发现:

dossier_1:
vc.all.2019.09.22.Sun
vc.all.2019.09.23.Mon

dossier_2:
vc.all.2019.09.22.Sun
vc.all.2019.09.23.Mon

dossier_3:
vc.all.2019.09.22.Sun
vc.all.2019.09.23.Mon

如果我想要这个输出,命令是什么:


dossier_1:
vc.all.2019.09.17.Tue.gz  
vc.all.2019.09.19.Thu.gz  
vc.all.2019.09.21.Sat.gz  
vc.all.2019.09.22.Sun.gz  
vc.all.2019.09.24.Fri.gz
vc.all.2019.09.18.Wed.gz 
vc.all.2019.09.20.Fri.gz  
vc.all.2019.09.25.Wed.gz


dossier_2:
vc.all.2019.09.17.Tue.gz  
vc.all.2019.09.19.Thu.gz  
vc.all.2019.09.21.Sat.gz  
vc.all.2019.09.22.Sun.gz  
vc.all.2019.09.24.Fri.gz
vc.all.2019.09.18.Wed.gz 
vc.all.2019.09.20.Fri.gz  
vc.all.2019.09.25.Wed.gz


dossier_3:
vc.all.2019.09.17.Tue.gz  
vc.all.2019.09.19.Thu.gz  
vc.all.2019.09.21.Sat.gz  
vc.all.2019.09.22.Sun.gz  
vc.all.2019.09.24.Fri.gz
vc.all.2019.09.18.Wed.gz 
vc.all.2019.09.20.Fri.gz  
vc.all.2019.09.25.Wed.gz

我想显示目录名他自己的文件,只有.gz扩展名。

但我不知道该怎么做。

你能帮帮我吗?

谢谢!

grep -v 'gz' 将排除所有包含 gz 的输入行,因此不确定为什么在实际希望保留它们时使用 -v 选项

我建议 shell 使用 globs 的循环解决方案

for d in *; do echo "$d"; ls -1 "$d"/*.gz; echo; done
  • for d in * 将遍历当前工作目录中的所有 files/directories。我假设你只有目录
  • echo "$d" 会显示目录名
    • 如果您希望在目录名称末尾使用冒号字符,请使用 echo "$d:"
  • ls -1 "$d"/*.gz 将在单列中显示此目录的所有以 .gz 结尾的文件
  • echo显示空行

这是一种使用 awk

的方法
ls -A1 * | awk '/(^|:|\.gz)$/'
dossier_1:
vc.all.2019.09.17.Tue.gz
vc.all.2019.09.18.Wed.gz
vc.all.2019.09.19.Thu.gz
vc.all.2019.09.20.Fri.gz
vc.all.2019.09.21.Sat.gz
vc.all.2019.09.22.Sun.gz
vc.all.2019.09.24.Fri.gz
vc.all.2019.09.25.Wed.gz

dossier_2:
vc.all.2019.09.17.Tue.gz
vc.all.2019.09.18.Wed.gz
vc.all.2019.09.19.Thu.gz
vc.all.2019.09.20.Fri.gz
vc.all.2019.09.21.Sat.gz
vc.all.2019.09.22.Sun.gz

dossier_3:
vc.all.2019.09.17.Tue.gz
vc.all.2019.09.18.Wed.gz
vc.all.2019.09.19.Thu.gz
vc.all.2019.09.20.Fri.gz
vc.all.2019.09.21.Sat.gz
vc.all.2019.09.22.Sun.gz
  • ls -A1 * 列出所有文件夹中的所有文件(仅名称),一次一行
  • /(^|:|\.gz)$/ 找到所有 empty、以 : 结尾或以 .gz 结尾的行并打印它们。