[英]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
(.*): .*
将捕获最后一行之前的文本:
和行中的空格并匹配该行的 restecho \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.