我有 2 个包含歌曲列表的文件。hdsongs.txt 和 sdsongs.txt
我编写了一个简单的脚本来列出所有歌曲并输出到文本文件,然后对其运行差异。它在大多数情况下都可以正常工作,但脚本中的实际 diff 命令将同一行显示为不同。这实际上发生在多条线路上,但不是全部。
以下是两个文件中歌曲的示例:
$ grep Apologize \*songs\*
hdsongs.txt:Timbaland/Apologize.mp3
sdsongs.txt:Timbaland/Apologize.mp3
Run Code Online (Sandbox Code Playgroud)
没有我可以看到的尾随特殊字符:
$ cat -A hdsongs.txt sdsongs.txt | grep Apologize
Timbaland/Apologize.mp3$
Timbaland/Apologize.mp3$
Run Code Online (Sandbox Code Playgroud)
当我运行 diff 时,它显示每个文件中的同一行;但线条不一样吗?
$ diff hdsongs.txt sdsongs.txt | grep Apologize
> Timbaland/Apologize.mp3
< Timbaland/Apologize.mp3
Run Code Online (Sandbox Code Playgroud)
这类似于这里的线程: diff 报告两个文件不同,尽管它们是相同的!
但这是针对文件中的行,而不是整个文件,并且那里的分辨率似乎不适合这种情况。
$ diff <(cat -A phonesongsonly.txt) <(cat -A passportsongsonly.txt) | grep Apologize
< Timbaland/Apologize.mp3$
> Timbaland/Apologize.mp3$
$ wdiff -w "$(tput bold;tput setaf 1)" -x "$(tput sgr0)" -y "$(tput bold;tput setaf 2)" -z "$(tput sgr0)" hdsongs.txt sdsongs.txt | …Run Code Online (Sandbox Code Playgroud) 我最近从 Ubuntu 12.04 升级到 12.10,有一次,它在apache2.conf. 那时我没有给我合并选项,所以我拒绝了新文件,安装程序将新文件另存为apache2.conf.dpkg-dist.
我可以比较这两个文件,diff apache2.conf apache2.conf.dpkg-dist并只得到不同的行。但是我想手动合并这两种,就像我如何解决 SVN 或 git 中的合并冲突一样。我怎样才能做到这一点?
我试图找到一种方法来确定一个文本文件是否是另一个文件的子集。
例如:
foo
bar
Run Code Online (Sandbox Code Playgroud)
是一个子集
foo
bar
pluto
Run Code Online (Sandbox Code Playgroud)
尽管:
foo
pluto
Run Code Online (Sandbox Code Playgroud)
和
foo
bar
Run Code Online (Sandbox Code Playgroud)
不是彼此的子集...
有没有办法用命令来做到这一点?
此检查必须是交叉检查,并且必须返回:
file1 subset of file2 : True
file2 subset of file1 : True
otherwise : False
Run Code Online (Sandbox Code Playgroud) diff 命令比较以查看两个文件之间的任何差异。是否可以使用相同的方法比较两个压缩文件,即压缩文件中的单个文件中的数据是否有任何差异,例如计数等?
文件1:
123
234
345
456
Run Code Online (Sandbox Code Playgroud)
文件2:
123
234
343
758
Run Code Online (Sandbox Code Playgroud)
预期输出:文件 3:
TRUE
TRUE
FALSE
FALSE
Run Code Online (Sandbox Code Playgroud)
所以代码应该比较两个文件,如果匹配则打印“TRUE”,否则它应该在新文件中打印“FALSE”。任何人都可以为此提供解决方案吗?
我可以diff filea fileb看看文件之间的区别。我也head -1 filea可以查看filea 或fileb 的第一行。如何组合这些命令来显示 filea 的第一行和 fileb 的第一行之间的区别?
在最近关于检查某些文件是否具有不同内容的 Ask Ubuntu 问题中,我看到一条评论指出,如果不同的部分无关紧要,cmp将比diff. 这个堆栈溢出答案同意,给出了cmp将在第一个不同字节处停止的原因。但是,GNUdiff有-q(or --brief) 标志,它应该使它report only when files differ. diff一旦发现任何差异,GNU也将停止比较似乎是合乎逻辑的(例如grep在指定-l或时在第一个匹配之后停止搜索-q)。
是cmp真正的速度比diff -q,在Linux系统的背景下,这可能有GNU版本?
是否有一种方便的方法来识别文件中重复或接近重复的文本块?
我想用它来识别代码重复。看起来有具有此功能的专业程序,但我不打算参与其中。
我希望有一个类似于 diff 的工具可以做一种“文件内”差异。更好的是在单个文件中使用 vimdiff。
当我在分支上工作时,我想快速跳转到我的“TODO”评论。这意味着
我知道两个部分解决方案:git grep TODO具有正确的格式(将 grep.lineNumber 设置为 true),但结果太多。 git diff master... | grep TODO是一组很好的结果,但不显示文件和行号。
是否有一个选项可以告诉git diff每个更改的行添加文件名和行号前缀?(--line-prefix看起来很有希望,但似乎只需要一个固定的字符串。)
我可以通过--new-line-format=":%dn: %L"(diff - 输出行号)吗git diff?
例如,目前我的搜索结果如下所示:
$ git diff master... | grep TODO
+ // TODO use a non-fatal assertion
+ // TODO use a non-fatal assertion
+// TODO make this conditional too
Run Code Online (Sandbox Code Playgroud)
但理想情况下我想要这样:
src/foo/abc.cpp:221:+ // TODO use a non-fatal assertion
src/foo/xyz.cpp:934:+ // TODO use a non-fatal assertion …Run Code Online (Sandbox Code Playgroud)