gpt4 book ai didi

linux - 从 git log 输出替换文件中的第二个字段

转载 作者:行者123 更新时间:2023-12-03 09:58:03 29 4
gpt4 key购买 nike

我有一个包含完整文件路由和时间戳的文件。

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

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

    关于linux - 从 git log 输出替换文件中的第二个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62020320/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com