替换 Git 日志输出中文件中的第二个字段



我有一个文件,里面充满了文件路由和时间戳。

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 log 上次编辑的正确时间戳:

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

问题是我有超过 500-600 个文件需要检查和替换正确的时间戳。我尝试了尴尬,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 x271x27: $(git log -1 --pretty="format:%ct" "1")|e' files.yml
  • (.*): .*将捕获最后:之前的文本和行中的空格,并匹配行的其余部分
  • echo x271x27:将文件路径放回原处,1将引用与(.*)匹配的文本,并且x27是单引号字符
  • $(git log -1 --pretty="format:%ct" "1")要执行的命令
  • e标志允许将整个修改后的行作为 shell 命令执行(不确定这是否特定于GNU sed,但问题被标记为linux所以这应该没问题(

请注意,这不是一个可靠的命令。带有空格和其他外壳元字符的文件名可能会导致问题。

相关内容

最新更新