заменить второе поле в файле из git вывода журнала - PullRequest
2 голосов
/ 26 мая 2020

У меня есть файл с множеством маршрутов и временных меток.

xxxx/view/css/animate.css/3.1.1/animate.min.css: 1494509091
xxxx/view/fonts/cinzel/fonts.css: 1494509091
xxxx/view/fonts/garamondcondot-book/fonts.css: 1494509092
xxxx/view/fonts/gotham-narrow/fonts.css: 1494509092
xxxx/view/fonts/gotham/fonts.css: 1494509092
xxxx/view/fonts/greatvibes/fonts.css: 1494509092
xxxx/view/fonts/indie-flower/fonts.css: 1494509092
xxxx/view/fonts/katibeh/fonts.css: 1494509092
xxxx/view/fonts/lobster-two/fonts.css: 1494509092
xxxx/view/fonts/museo/fonts.css: 1494509092
xxxx/view/fonts/myriad-pro/fonts.css: 1494509092

Эти временные метки неверны, поэтому мне нужно проверить git в журнале правильную последнюю отредактированную метку времени с помощью этой команды :

git log -1 --pretty="format:%ct" xxxx/view/css/animate.css/3.1.1/animate.min.css

Проблема в том, что мне нужно проверить более 500-600 файлов и заменить их на правильную временную метку. Я пробовал с awk, sed, но не очень хорошо. Вот мои примеры:

variables=$(git log -1 --pretty="format:%ct") 

     while read line ; do
         replacement="$variables $line"
         sed 's/,.*:/ $replacement/' <<< "$line"
     done < files.yml

другой:

  file="files2.yml"
  files=$(cat files.yml | awk '{print $1}' | cut -d ':' -f 1)
  for i in $files;do
    new=$(git log -1 --pretty="format:%ct" $i)
    sed "s/    .*:/ $new/" files2.yml
  done

Есть какие-нибудь подсказки?

1 Ответ

2 голосов
/ 26 мая 2020
sed -E 's|(.*): .*|echo \x27\1\x27: $(git log -1 --pretty="format:%ct" "\1")|e' files.yml
  • (.*): .* захватит текст перед последним : и пробел в строке, а также совпадет с остальной частью строки
  • echo \x27\1\x27:, чтобы вернуть путь к файлу, \1 будет относиться к тексту, совпадающему с (.*), а \x27 - это символ одинарной кавычки
  • $(git log -1 --pretty="format:%ct" "\1") команда, которую вы хотите выполнить
  • e флаг позволяет выполнить все измененные строку как команду оболочки (не уверен, что это указано от c до GNU sed, но вопрос помечен как linux, так что все должно быть в порядке)

Обратите внимание, что это не надежный команда. Имя файла с пробелами и другими метасимволами оболочки может вызвать проблемы.

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