我使用md5sum为文件生成哈希值。 但我只需要接收哈希值,而不是文件名。

md5=`md5sum ${my_iso_file}`
echo ${md5}

输出:

3abb17b66815bc7946cefe727737d295  ./iso/somefile.iso

我如何“剥离”文件名,只保留值?


当前回答

如果你担心文件名不正常:

md5sum < "${file_name}" | awk NF=1

f244e67ca3e71fff91cdf9b8bd3aa7a5

其他更混乱的处理方法:

md5sum "${file_name}" | awk NF=NF OFS= FS=' .*$' 或 | awk '_{exit}++_' RS=' '

f244e67ca3e71fff91cdf9b8bd3aa7a5

完全在awk中完成:

mawk '开始 { __ = ARGV[ --ARGC ] _ = sprintf(“%c”,(_+=(_^=_<_)+_)^_+_*++_) RS = FS gsub(_,“&\\\\&”,__) ( _=“ md5sum < ”((_)(__)_) ) |获取线 print $(_*close(_)) }' “${file_name}”

f244e67ca3e71fff91cdf9b8bd3aa7a5

其他回答

md5=`md5sum ${my_iso_file} | cut -b-32`

使用AWK:

md5=`md5sum ${my_iso_file} | awk '{ print $1 }'`

为了完整起见,sed使用正则表达式和捕获组的一种方法:

md5=$(md5sum "${my_iso_file}" | sed -r 's:\\*([^ ]*).*:\1:')

正则表达式捕获一个组中的所有内容,直到到达一个空格。要使捕获组工作,您需要捕获sed中的所有内容。

(关于sed和捕获组的更多信息请参见:如何使用sed只输出捕获的组?)

作为sed中的分隔符,我使用冒号,因为它们在文件路径中无效,而且我不必转义文件路径中的斜杠。

md5=$(md5sum < index.html | head -c -4)
md5="$(md5sum "${my_iso_file}")"
md5="${md5%% *}" # remove the first space and everything after it
echo "${md5}"