regex – diff而忽略一行内的模式,而不是整行
发布时间:2020-12-15 22:37:49 所属栏目:安全 来源:网络整理
导读:我经常需要比较两个文件,而忽略这些文件中的某些更改.我不想忽略整条线,只是它们的一部分.最常见的情况是线上的时间戳,但我还需要忽略其他几十种模式. 文件1: [2012-01-02] Some random text foo[2012-01-02] More output here 文件2: [1999-01-01] Some r
我经常需要比较两个文件,而忽略这些文件中的某些更改.我不想忽略整条线,只是它们的一部分.最常见的情况是线上的时间戳,但我还需要忽略其他几十种模式.
文件1: [2012-01-02] Some random text foo [2012-01-02] More output here 文件2: [1999-01-01] Some random text bar [1999-01-01] More output here 在这个例子中,我想看到第1行的差异,但不是第2行. 使用diff的-I选项不起作用,因为它忽略整行.理想输出: --- file1 2013-04-05 13:39:46.000000000 -0500 +++ file2 2013-04-05 13:39:56.000000000 -0500 @@ -1,2 +1,2 @@ -[2012-01-02] Some random text foo +[1999-01-01] Some random text bar [2012-01-02] More output here 我可以用sed预处理这些文件: sed -e's/^[....-..-..]//' < file1 > file1.tmp sed -e's/^[....-..-..]//' < file2 > file2.tmp diff -u file1.tmp file2.tmp 但后来我需要将这些临时文件放在某处,并记得事后清理它们.此外,我的diff输出不再引用原始文件名,也不再发出原始行. 是否有广泛可用的差异变体或类似工具,可以作为单个命令执行此操作? 解决方法
这不完全是你想要的,因为我不确定如何保留日期,但这确实解决了你的几个问题:
diff -u --label=file1 <(sed 's/^[....-..-..]//' file1) --label=file2 <(sed 's/^[....-..-..]//' file2) 输出: --- file1 +++ file2 @@ -1,2 @@ - Some random text foo + Some random text bar More output here (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |