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

Используйте find вместо ls . С помощью find вы можете исключить одно или несколько глобальных выражений. Для вашего примера (и OSX) вы можете сделать

find * -depth 0 -type f ! -name '*.ogg'  -ls

, который выдаст что-то вроде ls -l (только для файлов, учитывая -тип f ):

66294163        0 -rw-r--r--    1 tom              wheel                   0 Sep  9 20:12 foo.mp4

With OSX, первый столбец - это значение inode, а затем счетчик ссылок. find не предоставляет столько возможностей для листинга, сколько ls :

$ ls -l
total 0
drwx------  3 thomas  wheel  102 Sep  9 15:33 com.apple.launchd.OFStJ79qtq
drwx------  3 thomas  wheel  102 Sep  9 15:33 com.apple.launchd.VQsV1ae6bI
drwx------  3 thomas  wheel  102 Sep  9 15:33 com.apple.launchd.e6HBMt2vnS
drwx------  3 thomas  wheel  102 Sep  9 15:33 com.apple.launchd.he9U4OAIMI
-rw-r--r--  1 tom     wheel    0 Sep  9 20:12 foo.mp4
-rw-r--r--  1 tom     wheel    0 Sep  9 20:12 foo.ogg

, но может быть полезным.

2
29.10.2019, 20:53
2 ответа

Вы хотите использовать grep для исключения совпадающих строк, а не для их включения? Если да, попробуйте:grep -v "Don't care about"

0
27.01.2020, 21:56

Требуется тщательное цитирование оболочки, но вы можете использовать редактор сценариев edдля этого:

printf '%s\n' "/foo/ka" "??" "'a,.w "'!less' q | ed -s file

Это отправляет четыре команды наed:

  1. /foo/ka--ищет (с начала файла )шаблон foo; в этом первом совпадении установите отметку с именем a.
  2. ??--повторить поиск, но в обратном направлении, до конца файла; важным побочным продуктом здесь является то, что он устанавливает текущую строку в это (последнее )совпадение.
  3. 'a,.w !less--от метки с именем aдо текущей строки (.), запишите эти строки в команду оболочки(!)less.
  4. q--вышел изд.

Вам нужно выйти lessкорректно (q), чтобы edвышел. Это решение предполагает, что шаблон существует хотя бы один раз в файле, иначе поиск завершится ошибкой, и вы получите три ?перед выходом ed.

1
27.01.2020, 21:56

Теги

Похожие вопросы