2016-11-18 2 views
0

Вызов svn status дает мне список файлов, которые отличаются от изображений svn.Удалить определенную длину подстроки

D  subs/abc/deleted_sub.f90 
M  subs/abc/modified_sub.f90 
M  subs/abc/Makefile.Routinen 

мне нужна строка compile_string для gmake $compile_string.

То, что я не хочу в своей строке, - это объявленные файлы D для deleted и Makefile.Routinen файлов.

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

Так что я прочитал мой статус СВН в строку:

comp_files=$(svn status) 

Так я получаю длинную строку D subs/abc/deleted_sub.f90 M subs/abc/modified_sub.f90 M subs/abc/Makefile.Routinen.

Как я могу удалить следующий путь по файлу после «D» или если файл Makefile.Routinen?

ответ

1

при работе с колоннами Пожалуйста, попробуйте

comp_files=$(svn status | grep -E -v '^D|Makefile.Routinen') 
+0

Спасибо, что работал как шарм! –

1

awk хорошо подходит

comp_files=$(svn status | awk '$1 != "D" && $2 !~ /Makefile\.Routinen/{print $2}') 
  • $1 != "D" первый столбец не должен соответствовать символьной строки D
  • $2 !~ /Makefile\.Routinen/ второй столбец не должен содержат строку Makefile.Routinen
  • {print $2} если оба условия удовлетворяют, печать второй столбец


Если все содержимое строки необходимо вместо только второй колонке,

comp_files=$(svn status | awk '$1 != "D" && $2 !~ /Makefile\.Routinen/') 
Смежные вопросы