Что делает «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 в сценарии оболочки
  • подсчитывать строки, соответствующие строке в каждом подкаталоге, и их подкаталоги
  • Является ли -r обязательным для grep?
  • Найти файлы, содержащие строку, и не содержать другой
  • grep: шаблон соответствия в определенном положении
  • Как я могу искать имена файлов, которые начинаются с xy_ *, и создаются / редактируются сегодня?
  • grep несколько строк, подсчет строк, эхо-выход для каждой строки
  • grep, вторгающийся в мой ps
  • grep переменной оболочки не находит ничего
  • Использование обратной косой черты в разных командах
  • ls | Работа grep не работает с ls --color
  • Interesting Posts

    Почему sudo -i не устанавливает XDG_RUNTIME_DIR для целевого пользователя?

    Как найти, какие другие компьютеры подключены к локальной сети

    Найти альтернативу для Debian 5 для работы с большими файлами

    LVM – группа томов – что такое экстенты?

    Заменить текстовые поля со значениями из другого файла

    Как изменились эти настройки по умолчанию для Linux TCP?

    Как рекурсивно перечислить все скрытые файлы и каталоги?

    Как восстановить случайно удаленные kdesu

    Передача шаблона печати как переменной в awk

    Перенаправление запроса на устройство в режиме точки доступа

    Как добавить к переменной строку в скрипте?

    Есть ли способ добавить новые строки в таблицу для создания подгрупп?

    Как передать запрос схемы HTTPS прокси без использования туннеля CONNECT в FreeBSD?

    Выключение вывода консоли?

    Как отформатировать число с плавающей запятой с точностью до 2 значащих цифр в bash?

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