Использование grep с RedHat 7.7 - PullRequest
       10

Использование grep с RedHat 7.7

0 голосов
/ 25 сентября 2019

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 расширением.

Но я не знаю, как это сделать.

Вы можете мне помочь?

Спасибо!

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Вот способ сделать это, используя 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 и напечатайте их.
1 голос
/ 25 сентября 2019

grep -v 'gz' исключит все входные строки, содержащие gz, поэтому не уверен, почему вы использовали опцию -v, когда вы на самом деле хотели, чтобы они были сохранены

Я бы предложил решение с оболочкой цикла, используя globs

for d in *; do echo "$d"; ls -1 "$d"/*.gz; echo; done
  • for d in * будет перебирать все файлы / каталоги в текущем рабочем каталоге.Я предполагаю, что у вас есть только каталоги
  • echo "$d" будет отображать имя каталога
    • используйте echo "$d:", если вы хотите использовать двоеточие в конце имени каталога
  • ls -1 "$d"/*.gz отобразит все файлы, заканчивающиеся на .gz для этого каталога в одном столбце
  • echo, чтобы отобразить пустую строку
...