如何不敏感地检查文件相似度大小写
How to check file similarity case in-sensitively
想法是判断两个给定文件是否具有完全相同的内容,但不考虑大小写差异。
例如如果 file1 是 alpha
并且 file2 是 AlphA
,那么脚本 file1 file2 给出 'Same'.
如何让脚本不区分大小写?
#!/bin/bash
if cmp >/dev/null ; then
echo "Mostly the same."
else
echo "Different."
fi
也许:
file1=$(cat | tr '[:upper:]' '[:lower:]')
file2=$(cat | tr '[:upper:]' '[:lower:]')
if [ "$file1" = "$file2" ]; then
echo "same"
else
echo "different"
fi
cmp
使用 byte-by-byte 比较,因此您必须先进行自己的大小写转换:
if cmp -s <(tr '[:upper:]' '[:lower:]' <"") <(tr '[:upper:]' '[:lower:]' <""); then
echo "Mostly the same."
else
echo "Different."
fi
-s
使 cmp
无声 - 即,如果存在差异,则不会打印出来。
<(...)
是一个 process substitution,笼统地说,它使命令的输出显示为一个临时的、有效的 self-deleting 文件;由于进程替换使用管道,因此使用它们 memory-efficient 甚至可以工作
具有大输出集。
tr '[:upper:]' '[:lower:]'
对通过标准输入提供的字符进行 locale-aware 从大写到小写的转换,导致 all-lowercase 输出。
还要注意 </code> 和 <code>
是如何 double-quoted 以确保使用它们的值 as-is(double-quoting 保护来自 shell expansions 的值)。
如果文件足够小,你可以做的更简单。
#!/bin/bash
f1="$(<"")"
f2="$(<"")"
if
[[ "${f1^^}" = "${f2^^}" ]]
then
echo "Mostly the same."
else
echo "Different."
fi
想法是判断两个给定文件是否具有完全相同的内容,但不考虑大小写差异。
例如如果 file1 是 alpha
并且 file2 是 AlphA
,那么脚本 file1 file2 给出 'Same'.
如何让脚本不区分大小写?
#!/bin/bash
if cmp >/dev/null ; then
echo "Mostly the same."
else
echo "Different."
fi
也许:
file1=$(cat | tr '[:upper:]' '[:lower:]')
file2=$(cat | tr '[:upper:]' '[:lower:]')
if [ "$file1" = "$file2" ]; then
echo "same"
else
echo "different"
fi
cmp
使用 byte-by-byte 比较,因此您必须先进行自己的大小写转换:
if cmp -s <(tr '[:upper:]' '[:lower:]' <"") <(tr '[:upper:]' '[:lower:]' <""); then
echo "Mostly the same."
else
echo "Different."
fi
-s
使cmp
无声 - 即,如果存在差异,则不会打印出来。<(...)
是一个 process substitution,笼统地说,它使命令的输出显示为一个临时的、有效的 self-deleting 文件;由于进程替换使用管道,因此使用它们 memory-efficient 甚至可以工作 具有大输出集。tr '[:upper:]' '[:lower:]'
对通过标准输入提供的字符进行 locale-aware 从大写到小写的转换,导致 all-lowercase 输出。还要注意
</code> 和 <code>
是如何 double-quoted 以确保使用它们的值 as-is(double-quoting 保护来自 shell expansions 的值)。
如果文件足够小,你可以做的更简单。
#!/bin/bash
f1="$(<"")"
f2="$(<"")"
if
[[ "${f1^^}" = "${f2^^}" ]]
then
echo "Mostly the same."
else
echo "Different."
fi