Что делает «grep -v» ^. $ "" Do

У меня есть скрипт для очистки файлов данных

Команда:

for i in `find /ddomain/data/shop12/ -mtime +15 -print|grep -v "^.$" |grep data-` 

Я попытался запустить команду без функции grep -v и я не вижу никакой разницы.

Я хотел бы знать, что делает grep -v "^.$" . Я не создавал этот скрипт, и я ничего не могу найти в Интернете.

5 Solutions collect form web for “Что делает «grep -v» ^. $ "" Do”

grep -v "^.$" будет печатать все строки с ввода, кроме тех, которые имеют только один символ.

Поскольку он используется в:

 find /ddomain/data/shop12/ -mtime +15 -print|grep -v "^.$" 

мы можем предположить, что он должен отбросить текущий рабочий каталог ( . ) из вывода find (показан при использовании относительного пути), что легко может быть достигнуто с помощью опции -mindepth 1 , хотя здесь она избыточна, поскольку вы используете абсолютный путь в find .

Позже вы только ищите файлы с data- в их именах по данным grep data- – это тоже избыточно. Вы можете поместить всю логику в один вызов find :

 find /ddomain/data/shop12/ -name '*data-*' -mtime +15 -print 

Drop -print также является действием по умолчанию:

 find /ddomain/data/shop12/ -name '*data-*' -mtime +15 

Просто отметим, что если вы ищете только файлы, добавьте -type f тоже:

 find /ddomain/data/shop12/ -type f -name '*data-*' -mtime +15 

Как уже говорили другие, grep -v '^.$' Фильтрует строки, состоящие из ровно одного символа (строки, состоящие из начала строки ( ^ ), за которым следует один символ ( . ), За которым следует конец строки ( $ ). Другим способом его написания будет grep -vx . где -x делает неявные и неявные (совпадения на всей строке).

На выходе:

 find /ddomain/data/shop12/ -mtime +15 -print 

Это мало смысла, потому что вывод этой команды find обычно состоит из таких строк, как:

 /ddomain/data/shop12/foo /ddomain/data/shop12/foo/bar ... 

Единственный способ для этого вывода содержать строки с одним символом – это если есть файл, чье имя является чем-то вроде foo<newline>X<newline> . Это вполне возможно, но я бы сказал, что вряд ли это было целью этой команды.

Возможно, эта команда была (неправильно) адаптирована из:

 find . -mtime +15 -print | grep -v '^.$' | grep data- 

Где этот grep предназначался для фильтрации . запись (даже тогда, grep -Fvx . было бы более подходящим). Однако тогда было бы разумнее написать его:

 find . ! -name . -path '*data-*' -mtime +15 

Если вы хотите отфильтровать каталог верхнего уровня с помощью find /ddomain/data/shop12/ , вы должны сделать это как:

 find /ddomain/data/shop12/. ! -name . -path '*data-*' -mtime +15 

Или если ваша реализация find поддерживает предикат -mindepth :

 find /ddomain/data/shop12/ -mindepth 1 -path '*data-*' -mtime +15 

Он удаляет . из списка результатов find . Это проще объяснить на примере:

 find . -print . ./prova2 ./prova2/prova2 find . -print | grep -v '^.$' ./prova2 ./prova2/prova2 

Как вы можете видеть, в первом фрагменте кода мы находим . результат. Итак, вы передаете его действиям, предпринимаемым циклом for .
Во втором фрагменте вы решите пропустить . из результатов find , поэтому вы не отправляете его в цикл for .

Команда grep -v "^. $" Будет «удалять» из потока текущий каталог и любой файл / каталог, имеющие имя от одного символа. Например, пусть выполняется

 ls -a . .. a1 a2 a3 

и пусть выполнить его с помощью grep

 ls -a |grep -v "^.$" .. a1 a2 a3 

Как видите, точка исчезает

grep -v '^.$' исключает строки только с одним символом.

Пример:

 echo "foo > bar > x" | grep -v '^.$' foo bar 
  • grep отлично работает в командной строке, но ничего не возвращает в скрипте
  • Что означает ^> в шаблоне grep?
  • Проверка списка файлов xml
  • Как заменить строки-заполнители в документе содержимым из файла
  • Греп для одиночной и двойной цифры
  • Поиск и удаление строк, содержащих несколько шаблонов в файле
  • Стирание в stdin всех экземпляров регулярных выражений, определенных в файле
  • awk, sed, grep, perl ... которые распечатываются в этом случае?
  • Запустить fgrep multicore mac os x
  • Как показывать строки после каждого совпадения grep до другого конкретного совпадения?
  • exit awk, если вход отсутствует
  • Interesting Posts

    Как «заключить в тюрьму» процесс без root?

    Удалите поврежденные окна с ноутбука и снова установите новые окна, используя linux

    Почему мой блок Systemd загружен, но неактивен (мертв)?

    Есть ли общая пусковая установка для игр DosBox и ScummVM?

    Почему только одна активная группа за раз?

    Как создать псевдоним для zsh?

    toggle vlc fullscreen с использованием dbus и mpris

    `$ RANDOM` не является случайным в` “ “ “ `Exec“` “ “ “ “ “ “ `

    Почему мой скрипт Python, установленный на пипсе, не является исполняемым для всех?

    Увеличение даты в файле

    Как решить nsf-общую связанную ошибку при установке zsh в ubuntu?

    установка ffmpeg-php на centos

    полный Linux (не андроид) 7-дюймовый планшет?

    Прокси-сервер SSH по требованию через системные пользовательские устройства с активацией сокета не перезапускается по желанию

    Почему ping не работает через имя интерфейса, но работает через адрес интерфейса?

    Linux и Unix - лучшая ОС в мире.