目前我正在使用
$ STR1!= $ STR2
每个STR内部都有多条线。 这两行是从两个不同的文件中读取的,有时它会在行尾的EOL / EOF / Dot上失败。
我需要消除EOL / EOF / Dot-at-the-line-of-line(并且仅在结束时)。
任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
比较允许在一组有限方式上不同的两个字符串的常用技术是对它们进行标准化 - 以执行消除这些差异的变换。例如,如果要对大小写进行规范化,则简单的转换是将两边都改为全大写或全小写;为了标准化前导空格,可以简单地消除它。
git fetch --depth=100
注意:
normalize() {
s=${1//$'\r\n'/$'\n'} # change CRLFs to LFs
s=${1%$'\n'} # eliminate any trailing LF
# run other transforms (removing leading whitespace, trailing dots) line-by-line
sed -E \
-e 's/^[[:space:]]+//' \
-e 's/[.]$//' \
<<<"$s"
}
# compare normalized strings
if [[ "$(normalize "$STR1")" = "$(normalize "$STR2")" ]]; then
echo "Strings are identical after normalization"
else
echo "Strings differ after normalization"
fi
允许反斜杠转义用于表示文字;因此,$''
是文字的CRLF。$'\r\n'
展开${var//foo/bar}
,$var
的所有实例都替换为foo
。bar
会使大多数引号不必要,但在比较引用时,右侧确保将其视为文字字符串而不是glob表达式。[[ ]]
等同于GNUism sed -E
(启用ERE语法),它还适用于现代BSD sed -r
,包括MacOS X上的。{/ li>