Использование Awk для перехода на Bash - PullRequest
0 голосов
/ 05 октября 2018

Обновлено больше без использования sed

Я пытаюсь написать скрипт, который будет обрабатывать определенные типы файлов, которые изменились в ветке git.Например, если кто-то изменяет файл с расширением «.text», я хочу передать это имя файла какому-то bash-скрипту.Мне также нужно удалить часть имени файла перед передачей его в скрипт bash.

Я знаю, что, выполнив следующую команду, я смогу получить список файлов git, которые изменились в ветке

git diff --name-only master

В сочетании с grep я могу получить файлы только сспециальное расширение

git diff --name-only master | grep .text

Теперь вот часть, которую я не могу заставить работать с командной строкой, я хочу передать каждый файл индивидуально моему сценарию bash.Ниже только один раз выполняет эхо со всеми аргументами.Возможно ли это?

git diff --name-only master | grep .text | awk -F"folder-name/" '{print $2} | xargs -t echo

1 Ответ

0 голосов
/ 05 октября 2018

Вы попросили Sed ничего не печатать по умолчанию, и вы ничего не печатаете явно.Вот man sed:

   -n, --quiet, --silent
          suppress automatic printing of pattern space

Если вы хотите автоматическую печать строк, удалите -n.

Обновление:

В вашей попытке awk отсутствует одна цитата:

awk -F"folder-name/" '{print $2} 
                                ^-- Here

Если вы хотите каждый раз вызывать скрипт только с одним аргументом, вы можете использовать xargs -n 1.Вот man xargs:

   -n max-args, --max-args=max-args
          Use  at  most  max-args  arguments per command line.  Fewer than
          max-args arguments will be used if the size (see the -s  option)
          is  exceeded, unless the -x option is given, in which case xargs
          will exit.
...