我能忽略diff中的注释使用正则表达式吗?

3

我需要进行文件比较,但我想要排除掉注释。目前得到的结果如下:

我使用了以下命令:diff -b -B [patch] [patch],它给出的结果是:

< #<Location /bancochile>
< #        WeblogicHost bgri.wls.ri
< #        WeblogicPort 20015
< #        SetHandler weblogic-handler
< #</Location>
< 
45c39,43

你希望得到什么结果? - Mark Setchell
1
diff 的输出通过管道传递给 grep -v,以过滤掉您不想要的行。 - Barmar
2
你是否在寻找GNU diff-I选项? - chepner
顺便问一下,您只是想知道未注释的内容是否不同吗?这比计算将一个转换为另一个的最短编辑的差异要简单/容易得多,这是diff的工作。 cmp可以更快地完成这个更简单的任务。 - Charles Duffy
我只希望你不要比较这些注释。 - Manuel Alejandro Urbina
2个回答

2

正如 @chepner所建议的,GNU diff明确支持此目的:

diff -I '^[[:space:]]*[#]' -b -B old.cfg new.cfg

话虽如此,如果你只想知道是否有变化,使用 cmp 更加高效:

if cmp -s <(grep -E -v '^[[:space:]]*[#]' <old.cfg) \
          <(grep -E -v '^[[:space:]]*[#]' <new.cfg); then
  echo "Excluding comments, these files are identical"
fi

2

我建议使用bash:

diff -b -B <(grep -v '^#' patch1) <(grep -v '^#' patch2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接