Оболочка UNIX: как вы настраиваете выражение для поиска? - PullRequest
1 голос
/ 22 сентября 2010

Конец состояния git выглядит следующим образом:

# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       Classes/Default.png
#       Classes/Default@2x.png
...

Поскольку у вас может быть любое количество неотслеживаемых файлов, я пытаюсь перейти от конца файла к «Неотслеживаемым файлам» и сохранитьэто во временный файл, зачистите первые три строки и преобразуйте имена файлов в git add Classes /...

Не могу найти хороший способ (кроме, возможно, другого языка) к хвостудо поискового выражения.Спасибо!

Ответы [ 4 ]

2 голосов
/ 22 сентября 2010

Используйте sed, чтобы распечатать все, начиная с «неотслеживаемых файлов»:

git status | sed -n '/Untracked files:$/,$p'

Затем вам нужно просто разобрать имена файлов, удалив символ #.

Вы также можете использовать git status -s для получения более короткого, более легко анализируемого вывода:

~$ git status -s
?? Classes/Default.png
?? Classes/Default@2x.png

Это хорошее приложение awk, которое позволяет одновременно выполнять поиск и извлечение:

~$ git status -s | awk '/\?\?/{print $2}'
Classes/Default.png
Classes/Default@2x.png

В качестве альтернативы: awk '{if ($1 == "??") print $2}'

Вы также можете, конечно, использовать git add для отображения (и добавления) неотслеживаемых файлов.

0 голосов
/ 22 сентября 2010

Решение с использованием сценариев оболочки.

Сначала начните чтение файла в цикле while, ведите счетчик количества прочитанных строк, прерывайте цикл, когда найдена нужная строка.Используя количество строк, заканчивайте файл, а затем извлекайте имена файлов, используя awk.

i=0; 
l=`wc -l filename | awk '{print $1}'`; 

while read line; 
do i=`echo $i + 1 | bc`; 
if [[ $line == "# Untracked files:" ]]; 
then break; 
fi; 
done < "filename"; 

tail -`echo $l -$i -2 | bc` filename | awk -F "/" '{print $NF}'

Здесь «имя файла» - это файл, который вы хотите обработать

0 голосов
/ 22 сентября 2010

Используйте команду tail:

tail -$(($(wc -l < file.txt) - $(grep -n "Untracked files" file.txt|cut -d: -f1) - 2)) file.txt

Как это работает:
общее количество строк в файле = wc -l < file.txt
номер строки "неотслеживаемых файлов" = grep -n "Untracked files" file.txt|cut -d: -f1
-2 - удалить верхние строки

Завершить команду с git add:

tail -$(($(wc -l < file.txt) - $(grep -n "Untracked files" file.txt|cut -d: -f1) - 2)) file.txt | tr -d '#'| while read line; do echo git add $line; done
0 голосов
/ 22 сентября 2010

Труба это к:

perl -e 'my ($o, $p) = (0, shift); while(<>){print if $o or $o = /$p/}' "$MY_REGEX"

Где $MY_REGEX - ваш шаблон. В вашем случае, вероятно, '^\s{7}'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...