Простого исправление изменить последнюю строку
grep -v 'SVCS/bus/projects/Resources/.*\.jar$'
но что на самом деле какой-то ужасный код у вас там.
Имея в виду, что grep | awk
и awk | grep
- antipattern, как насчет этого рефакторинга?
git status -s |
grep -E "^M|^D|^A|^R|^C" |
awk '{if ($1~/M+/ || $1~/D+/ || $1~/A+/ || $1~/R+/ || $1~/C+/)
... Подождите, в чем смысл? grep
уже убедился, что $1
содержит одну или несколько букв. Коэффициент +
здесь полностью избыточен.
print $2}'
Будет разбит на файлы с пробелами в них. Это очень распространенная ошибка, которая усугубляется, потому что много времени программист знал, что это сломается, но просто подумал: «здесь не может быть».
git status -s | awk 'NR==FNR { files[$0] = 1; next }
/^[MDARC]/ { gsub(/^[MDARC]+ /, "");
if ($0 ~ /SVCS\/bus\/projects\/Resources\/.*\.jar$/)
next;
if ($0 in files) print }' "$list_of_files" -
NR==FNR
вещи является общей идиомой, чтобы прочитать первый файл в массив, а затем падает до следующего входного файла. Итак, мы читаем $list_of_files
в ключи ассоциативного массива files
; то, если имя файла, которое мы читаем от git status
, присутствует в ключах, мы печатаем его. Условие пропускать файлы .jar
в определенном пути является простым дополнением к этому сценарию Awk.
Предполагается, что $list_of_files
действительно представляет собой список фактических файлов, предложенных по имени файла. Ваш код будет искать соответствие в любом месте этого файла, поэтому также будет совпадать имя частичного файла (например, если файл содержит path/to/ick
, файл с именем somepath/to/icktys/mackerel
будет соответствовать и, следовательно, будет напечатан). Если это назначенная функциональность, приведенный выше сценарий потребует некоторых довольно резких изменений.
Поскольку у вас много, много труб, я думаю, что это, вероятно, можно обрабатывать в одном процессе. Пожалуйста, отправьте образец вывода «git status -s» с окончательным желаемым выходом. – fedorqui
Я не уверен, почему у вас есть флаг '-r' в последнем' grep', но я могу что-то упустить; как насчет try '| grep -vE "SVCS/bus/projects/Resources/*. jar" 'как последняя команда вместо текущего' grep'? –
Часть до 'awk' может быть:' git status -s | awk '$ 1 ~/M | D | A | R | C/{print $ 2}' '.. Что такое содержимое' $ list_of_files'? – hek2mgl