gpt4 book ai didi

regex - 如果修改的文件来自给定目录,则解析 git 状态日志并退出

转载 作者:行者123 更新时间:2023-12-04 10:57:17 25 4
gpt4 key购买 nike

如果git status 中的文件被修改,我已经编写了以下脚本来抛出错误来自 directory_3 .现在我想增强这个脚本以退出,如果文件在任何目录中被修改,除了:directory_1/path/to/dir_1/directory_2/path/to/dir_1/ .
我无法编写如何忽略 git status 的前两行和最后三行的脚本日志 ( git_status.log ) 如下所示。我如何修改 if condition忽略除上述两个目录之外的所有目录。

INITIAL_SCRIPT

#!/usr/bin/perl
use strict;
use warnings;

my $filename = "/home/user/git_status.log";
open(my $fh, '<:encoding(UTF-8)', $filename) or die "Could not open file '$filename' $!";

while (my $row = <$fh>) {
chomp $row;
#print "INFO: $row \n";

if(grep(/\bdirectory_3\b/, $row))
{
print "INFO: This is an error case. Exit now \n";
print ">>> $row \n";
exit 1;
}
}

INPUT_FILE
$> cat git_status.log

On branch development_branch
Changes to be committed:

modified: directory_1/path/to/dir_1/file1.txt
modified: directory_1/path/to/dir_2/file2.txt
new file: directory_2/path/to/dir_1/file3.txt
modified: directory_2/path/to/dir_2/file4.txt
new file: directory_3/path/to/dir_2/file5.txt
modified: directory_3/path/to/dir_2/file6.txt

It took 3.92 seconds to enumerate untracked files. 'status -uno'
may speed it up, but you have to be careful not to forget to add
new files yourself (see 'git help status').

最佳答案

您只需要增强正则表达式即可忽略这些行。您可以使用以下内容来识别以 modified: 开头的行或 new file:并且那些不包含您提供的允许路径。这样,如果正则表达式达到某些结果,您的条件就会成立,并且您可以像 OP 中显示的那样抛出错误

if( grep { ( (/\b(modified|new file):/ ) and ( !/((directory_1|directory_2)\/path\/to\/dir_1)/) ) } $row )

而不是转储 git status 的结果到一个文件并稍后解析它,为了在命令行上快速检查,您可以将状态输出通过管道传输到
perl -le 'print grep{/\b(modified|new file):/ && !/((directory_1|directory_2)\/path\/to\/dir_1)/}<>'

关于regex - 如果修改的文件来自给定目录,则解析 git 状态日志并退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59098603/

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