String 不区分空格/制表符/换行符的比较

String 不区分空格/制表符/换行符的比较,string,bash,shell,comparison,diff,String,Bash,Shell,Comparison,Diff,假设我有两个文件: 文件1: 1234567 文件2: 1 2 3 4 5 6 7 是否可以使用diff来比较这两个文件,使结果相等 (如果没有,我应该使用哪些其他工具?) 谢谢一些diff有a-b(忽略空格)和-w(ingnore空格),但由于unix实用程序都是面向行的,我认为空格不会包含\n字符 Dbl检查您的diff版本是否没有一些带有diff--help | less或mandiff的奇特gnu选项 上面的格式正确吗,文件1,数据都在一行上?您可以强制file2将该格式与 awk '

假设我有两个文件:

文件1:
1234567

文件2:

1
2
3
4
5
6
7
是否可以使用
diff
来比较这两个文件,使结果
相等

(如果没有,我应该使用哪些其他工具?)


谢谢

一些diff有a
-b
(忽略空格)和
-w
(ingnore空格),但由于unix实用程序都是面向行的,我认为空格不会包含
\n
字符

Dbl检查您的
diff
版本是否没有一些带有
diff--help | less
mandiff
的奇特gnu选项

上面的格式正确吗,文件1,数据都在一行上?您可以强制file2将该格式与

awk '{printf"%s ", $0}' file2 
或者如注释中所述,转换文件1

awk '{for (i=1;i<=NF;i++) printf("%s\n", $i)}' file1

awk'{for(i=1;i一些diff有a
-b
(忽略空格)和
-w
(ingnore空格),但由于unix实用程序都是面向行的,我认为空格不会包含
\n
字符

Dbl检查您的
diff
版本是否没有一些带有
diff--help | less
mandiff
的奇特gnu选项

上述文件1、数据的格式是否正确?您可以强制文件2将该格式与

awk '{printf"%s ", $0}' file2 
或者如注释中所述,转换文件1

awk '{for (i=1;i<=NF;i++) printf("%s\n", $i)}' file1

awk'{for(i=1;i您可以折叠空格,使
file2
看起来像
file1
,每个数字都在同一行:

$ cat file1
1 2 3 4 5 6 7
$ cat file2
1
2
4
3
5
6
7
$ diff <(echo $(< file1)) <(echo $(< file2))
1c1
< 1 2 3 4 5 6 7
---
> 1 2 4 3 5 6 7
这类似于第一个命令,将
echo
更改为
printf“%s\n”
,以便在每个单词后面加一个换行符


注意:如果不同的文件过长,这两个命令都将失败。这是因为命令行长度受到限制。如果出现这种情况,则需要解决此限制,例如将echo/printf的输出存储到临时文件。

可以折叠空白,使
文件2
看起来像e
file1
,每个数字都在同一行:

$ cat file1
1 2 3 4 5 6 7
$ cat file2
1
2
4
3
5
6
7
$ diff <(echo $(< file1)) <(echo $(< file2))
1c1
< 1 2 3 4 5 6 7
---
> 1 2 4 3 5 6 7
这类似于第一个命令,将
echo
更改为
printf“%s\n”
,以便在每个单词后面加一个换行符


注意:如果不同的文件过长,这两个命令都会失败。这是因为命令行长度受到限制。如果出现这种情况,则需要解决此限制,例如将echo/printf的输出存储到临时文件。

如果数据确实足够简单,无法运行into限制,文件之间的唯一区别是第一个文件按空格分隔,第二个文件按换行符分隔,您也可以执行进程替换(如上所述),但使用sed将第一个文件中的空格替换为换行符:


diff如果数据确实足够简单,不会遇到限制,并且文件之间的唯一区别是第一个文件按空格分隔,第二个文件按换行符分隔,那么您也可以进行进程替换(如上所述),但使用sed将第一个文件中的空格替换为换行符:


diff将换行符(或者可能
\s+\r+
)转换为空格,然后检查是否
diff-w
(与
diff相同--忽略所有空格
)帮助?将换行符(或者可能
\s+\r+
)转换为空格,然后检查是否
diff-w
(与
diff--忽略所有空格
相同)帮助?规范化为换行符会产生更整洁的差异。
diff规范化为换行符会产生更整洁的差异。
diff