Unix команда, чтобы убрать часть строки - PullRequest
2 голосов
/ 27 января 2012

Я работаю с командной строкой SVN. Исходя из TortoiseSVN для Windows, я нахожу это очень утомительным всякий раз, когда я пытаюсь выбрать один конкретный файл для восстановления, различий, фиксации и т. Д., Когда путь очень длинный, как этот:

src/com/company/stuff/platform/appname/subpackage/subsubpackage/Foo.java

Если я хочу сделать diff для этого файла, я должен напечатать все это:

svn diff src/com/company/stuff/platform/appname/subpackage/subsubpackage/Foo.java

Итак, я пытаюсь понять это следующим образом:

svn st | grep Foo

Но возвращается:

M       src/com/company/stuff/platform/appname/subpackage/subsubpackage/Foo.java

Теперь, как мне убрать часть "M", чтобы я мог получить только путь к файлу?

Ответы [ 4 ]

1 голос
/ 27 января 2012

Для этого я бы использовал awk:

svn st | awk '/Foo/ { print $2 ; }'

awk принимает сценарии с соответствующими инструкциями и блоками кода для выполнения в соответствующих строках. Это сопоставляет строки с Foo в них и печатает второе поле. (Используется стандартный разделитель FS, который должен разделяться на табуляцию и пробелы.)

Вам также следует изучить возможности завершения имени вашей оболочки; большинство новых оболочек включают возможность заполнять частично напечатанные имена файлов. Для вашего длинного примера:

src/com/company/stuff/platform/appname/subpackage/subsubpackage/Foo.java

Я бы, наверное, напечатал это так:

src/com/com<tab>/stuff/pla<tab>/appn<tab>/subp<tab>/subsub<tab>/Foo<tab>

Вам может потребоваться ввести более или менее в зависимости от того, какие файлы находятся в ваших каталогах.

1 голос
/ 27 января 2012
svn st | grep Foo | sed 's/^[A-Z]\s*//'
1 голос
/ 27 января 2012

Если 'svn st' всегда возвращает (нежелательный) первый столбец, а затем путь, попробуйте это:

svn st | grep Foo | awk '{print $2}'
1 голос
/ 27 января 2012
svn st | grep Foo | sed 's/M *//'
...