1

Я пытаюсь точно определить, что делает следующая строка сценария оболочки:

grep --files-with-matches '>' . | sort | uniq | xargs perl -pi~ -e 's/9Kp/9K /' /home/user/DATAFILE.DAT

Я почти уверен, что он пытается выполнить глобальный поиск по «9Kp» и заменить на «9K» в указанном файле данных, однако мне не ясно, что команда grep делала до этого.

1 ответ1

3
grep --files-with-matches '>' .

Найдите > в текущем каталоге (.) И напечатайте только имена файлов соответствующих файлов (--files-with-matches).

Обратите внимание , что grep ничего не вернется , если вы даете ему каталог . , Но забудьте включить "рекурсивный" режим. Правильная команда будет

grep --files-with-matches --recursive '>' .

или просто

grep -Rl '>' .

| sort
| uniq

Сортируйте результаты и удаляйте дубликаты.

| xargs perl -pi~ -e 's/9Kp/9K /' /home/user/DATAFILE.DAT

Запустите данную команду (perl ...), передав каждое слово 1 из stdin в качестве дополнительных аргументов.

Каждый файл из результатов grep , а также файл /home/user/DATAFILE.DAT обновляются путем замены текста « 9Kp » на « 9K  ». Старые файлы сохраняются с тильдой.

1 Примечание: слово, а не строка. Это означает, что имя файла с пробелами будет рассматриваться как несколько имен. xargs -d'\n' будет лучше, хотя и не идеально.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .