Bash获取远程URL文件大小异常:返回结果含\C-M字符求助
解决curl获取Content-Length时出现\C-M字符的问题
嘿,这个\C-M其实是回车字符(Carriage Return, CR),也就是ASCII码里的13号字符。之所以会显示成这个样子,是因为HTTP响应头的每一行都是以CRLF(回车+换行)结尾的,而Unix/Linux系统默认用LF(换行)作为行结束符,当你用grep和cut提取内容时,没有把开头的CR字符去掉,终端就把这个不可打印的字符转义成了\C-M(这是bash对Ctrl+M的表示,而Ctrl+M对应的就是CR)。
下面给你几个简单的解决方法:
用
tr删除回车符:在原有命令后面加个tr -d '\r',直接删掉所有CR字符:curl -sI $url | grep -i content-length | cut -d ' ' -f 2 | tr -d '\r'用
awk一步处理(更简洁):awk可以直接匹配行并处理掉CR,不用多个管道:curl -sI $url | awk '/content-length/i {sub(/\r/,"",$2); print $2}'或者也可以结合
tr,写法更简单:curl -sI $url | awk '/content-length/i {print $2}' | tr -d '\r'用
sed移除行尾的CR:sed可以精准替换行尾的回车符:curl -sI $url | grep -i content-length | cut -d ' ' -f 2 | sed 's/\r$//'
这些方法都能帮你得到干净的文件大小数值,不会再带有那个烦人的\C-M啦~
内容的提问来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

