簡體   English   中英

從 git 日志 output 替換文件中的第二個字段

[英]replace second field in a file from git log output

我有一個包含文件路徑和時間戳的文件。

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

你有什么建議嗎?

sed -E 's|(.*): .*|echo \x27\1\x27: $(git log -1 --pretty="format:%ct" "\1")|e' files.yml
  • (.*): .*將捕獲最后一行之前的文本:和行中的空格並匹配該行的 rest
  • echo \x27\1\x27:放回文件路徑, \1將引用由(.*)匹配的文本, \x27是單引號字符
  • $(git log -1 --pretty="format:%ct" "\1")你要執行的命令
  • e標志允許將整個修改后的行作為 shell 命令執行(不確定這是否特定於GNU sed ,但問題被標記為linux所以應該沒問題)

請注意,這不是一個強大的命令。 帶有空格和其他 shell 元字符的文件名可能會導致問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM