Я хочу добавить имя каталога до последнего слова в строке.Строка имеет следующий формат:
100644 bfadfab6f98b8fa1e9989fe16b2bf0fb13ffd39e 0^IoneFile$
, где ^I
обозначает tab
, а $
обозначает конец строки.Эта строка генерируется git ls-files -s
.
Я хочу, чтобы команда sed
добавляла one/
к имени файла в этой строке, например:
`100644 bfadfab6f98b8fa1e9989fe16b2bf0fb13ffd39e 0^Ione/oneFile$
Некоторые строки, которые я 'мы попробовали, и их соответствующие выходные данные:
Соответствует самой длинной строке символов, которые не \t
, сопровождаемые $
;append one/
:
$ git ls-files -s | sed 's|[^\t]*$|one/&|'
one/100644 bfadfab6f98b8fa1e9989fe16b2bf0fb13ffd39e 0 oneFile
Соответствует самой длинной строке символов, которые не являются \t
или ' '
, за которыми следует $
;pre-pend one/
:
$ git ls-files -s | sed 's|[^\t ]*$|one/&|'
100644 bfadfab6f98b8fa1e9989fe16b2bf0fb13ffd39e one/0 oneFile
Соответствует самой длинной строке символов, которые не являются горизонтальными пробелами, с префиксом «один /»:
$ git ls-files -s | sed 's|[^[[:blank:]]]*$|one/&|'
100644 bfadfab6f98b8fa1e9989fe16b2bf0fb13ffd39e 0 oneFilone/e
Я в основном перепробовал множество вещей, подходящих для:
[^\t ]*$|one/&
[^[[:space:]]]*$|one/&
иперечисленные выше.Самое близкое, что я могу получить, это иметь oneFilone/e
, который был [^[[:blank:]]]*$|one/&|'
, или предварительно ожидать 0
, но я не могу, кажется, получить то, что хочу.
РЕДАКТИРОВАТЬ Поскольку несколько человек комментировали / публиковали ответы, ни один из которых не работал для меня, я решил добавить: я использую Mac OS X 10.7.3.Версия sed
Я не совсем уверен (если кто-нибудь знает способ получить комментарий, добавьте комментарий к этому эффекту) - страница man sed
говорит, что это BSD sed.Я не уверен, насколько это отличается от GNU sed
, если таковые имеются.
Я также использую zsh
, с запущенным oh-my-zsh
(довольно немодифицированным).Я включил extended_glob
(setopt extended_glob
).
Я прокомментировал свои результаты для ответов, которые дали люди;Я предполагаю, что они работают в дистрибутиве Linux?Сегодня вечером у меня нет доступа к системе не-OS X, но завтра я перезапущу все ответы;может быть, это просто мой [shell|OS|bad karma]
, который не позволяет им работать на меня.
РЕДАКТИРОВАТЬ Снова:
Итак, я протестировал систему Ubuntu, и (1) выше работает.Я хотел бы рабочую версию для моего Mac, хотя.
Окончательное редактирование: Спасибо всем, кто ответил рабочими эквивалентными командами.Оказывается, мой первый работает , но не с BSD sed
.У меня, однако, есть gsed
(спасибо, что указал на это!), Что делает все это волшебным образом.