使用 diff 命令比较两个字符串?

使用 diff 命令比较两个字符串?

根据https://www.computerhope.com/unix/udiff.htm

diff命令分析两个文件并打印不同的行。

我可以使用相同的diff命令来比较两个字符串吗?

$ more file*
::::::::::::::
file1.txt
::::::::::::::
hey
::::::::::::::
file2.txt
::::::::::::::
hi
$ diff file1.txt file2.txt 
1c1
< hey
---
> hi

hey我可以直接读取它,而不必将和的内容保存hi到两个不同的文件中吗?

顺便说一下,下面的示例中没有名为hey或 的文件,这就是我收到错误消息的原因。hiNo such file or directory

$ diff hey hi
diff: hey: No such file or directory
diff: hi: No such file or directory

答案1

diff是的,如果您从两个字符串创建文件,则可以使用它们,因为diff只会比较文件。

执行此操作的快捷方法是在支持这些的 shell 中使用进程替换:

diff <( printf '%s\n' "$string1" ) <( printf '%s\n' "$string2" )

例子:

$ diff <( printf '%s\n' "hey" ) <( printf '%s\n' "hi" )
1c1
< hey
---
> hi

在其他外壳中,

printf '%s\n' "$string1" >tmpfile
printf '%s\n' "$string2" | diff tmpfile -
rm -f tmpfile

diff在第二个示例中,一个文件包含第一个字符串,而第二个字符串则在标准输入上 给出。diff使用包含第一个字符串作为其第一个参数的文件来调用。作为它的第二个参数,-表明它应该读取标准输入(第二个字符串将通过 到达printf)。

答案2

对于希望在脚本编辑器 (AppleScript) 中使用字符串而不是文件输入作为“diff”命令的人们,我发现经过一番辛苦工作后,以下方法有效:

do shell script "bash -c 'diff -y <(echo '\\''" & string1 & "'\\'') <(echo '\\''" & string2 & "'\\'')'

请注意,需要将代码呈现为要在 bash shell 和邪恶的转义标记中运行的字符串。

相关内容