杂:使用Shell判断文件换行符(LF/CRLF)
前提:文件最后一行有换行符
第一步:以二进制方式取得文件最后两个byte。
last2=`tail -c 2 <your_file> | od -x -A n`
第二步:判断最后两个byte是否是'CRLF'
if [ $last2 = 0a0d -o $last2 = 0d0a ]
then
# Cheating! If the file ends in LFCR, it would incorrectly
# say that it is CRLF
echo File ends in CRLF
fi
另外,下面这种方法的原理,让人百思不得其姐,
#重定向标准输入
exec < <your_file>
read -r line
case $line in *$'\r') return 1;; *) return 0;; esac
原以为read加了-r就可以把$'\n'读出来,实际上却是用read把末尾的$'\n'先去掉,剩下的如果是$'\r'就认为是'CRLF'换行。
这个语句表明read一定会去掉末尾的$'\n'
PS:Shell里$'\r'和$'\n'就这么写
完整代码
#!/bin/bash
if [ $# -eq 0 ] ; then
echo "error : there is no para"
exit 1
fi
if [ ! -e $1 ] ; then
echo "file $1 is not exist"
exit 1
fi
last2=$(tail -c 2 "$1" | od -x -A n)
if [ $last2 = 0a0d -o $last2 = 0d0a ] ; then
echo "end with \\r\\n"
else
echo "end with \\n"
fi
遍历文件夹版
#!/bin/bash
#func check CRLF bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
check_CRLF(){
last2=$(tail -c 2 "$1" | od -x -A n)
echo "last2 is $last2"
if [ $last2 = 0a0d -o $last2 = 0d0a ] ; then
echo "warning! file $1 end with \\r\\n"
else
echo "file $1 end with \\n"
fi
}
#func traverse folder bbbbbbbbbbbbbbbbbbbbbbbbbbbb
traverse_folder(){
# no para
if [ $# -eq 0 ]; then
exit 1
fi
# not folder
if [ ! -d $1 ]; then
exit 1
fi
# traversal
for files_or_folder in $1/*
do
# is file
if [ -f $files_or_folder ]; then
check_CRLF $files_or_folder
# is folder
elif [ -d $files_or_folder ]; then
traverse_folder $files_or_folder
else
exit 1
fi
done
}
#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
if [ $# -eq 0 ] ; then
echo "error : there is no para"
exit
fi
traverse_folder $1
一句搞定版
find . -type f | xargs file | grep CRLF
杂:使用Shell判断文件换行符(LF/CRLF)的更多相关文章
- git 换行符LF与CRLF转换问题
git 换行符LF与CRLF转换问题 一.背景 在各操作系统下,文本文件所使用的换行符是不一样的.UNIX/Linux 使用的是 0x0A(LF),早期的 Mac OS 使用的是0x0D(CR),后来 ...
- shell判断文件是否存在
转自:http://www.cnblogs.com/sunyubo/archive/2011/10/17/2282047.html 1. shell判断文件,目录是否存在或者具有权限 2. #!/bi ...
- Linux shell判断文件和文件夹是否存在
shell判断文件,目录是否存在或者具有权限 #!/bin/sh myPath="/var/log/httpd/" myFile="/var /log/httpd/acc ...
- shell 判断文件、目录是否存在
shell判断文件是否存在 1. shell判断文件,目录是否存在或者具有权限 2. #!/bin/sh 3. 4. myPath="/var/log/httpd/" 5. m ...
- Shell 判断文件或文件夹是否存在
#shell判断文件夹是否存在 #如果文件夹不存在,创建文件夹 if [ ! -d "/myfolder" ]; then mkdir /myfolder fi #shell判断文 ...
- [转] Linux shell判断文件和文件夹是否存在
shell判断文件,目录是否存在或者具有权限 #!/bin/sh myPath="/var/log/httpd/" myFile="/var /log/httpd/acc ...
- shell判断文件夹是否存在
#shell判断文件夹是否存在 #如果文件夹不存在,创建文件夹 if [ ! -d "/myfolder" ]; then mkdir /myfolder fi #shell判断文 ...
- shell判断文件类型和权限
shell 判断文件类型. -d 文件 判断该文件是否存在,并且是否为目录(是目录为真) -e文件 判断该文件是否存在(存在为真) -f文件 判断该文件是否存在,并且是否为文件(是普通文件为真) - ...
- shell判断文件是否存在[转]
原文出处: http://canofy.iteye.com/blog/252289 shell判断文件,目录是否存在或者具有权限 #!/bin/sh myPath="/var/log/htt ...
- shell判断文件,目录是否存在或者具有权限
shell判断文件,目录是否存在或者具有权限 #!/bin/sh myPath="/var/log/httpd/" myFile="/var /log/httpd/ ...
随机推荐
- 使用brew安装历史版本的几种方式
背景 在 mac osx 下, 大部分的软件都是使用 homebrew 进行管理的, 可以方便的进行软件的安装,更新,删除等等, 大部分情况下 homebrew 的仓库只会存在一份最新的软件版本, 有 ...
- vue axios请求中断的处理
https://blog.csdn.net/qiaoqiaohong/article/details/121014296
- 消息传递(news)题解
代码 #include<cstdio> #include<algorithm> using namespace std; const int N = 200000; int f ...
- 解决.Net Core3.0 修改cshtml代码之后必须重新生成才可以看到效果
1.安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation包 2.在Startup中ConfigureServices方法里面加入services.Ad ...
- 在使用vite报global的错
解决:
- 支持管道、重定向、*匹配的miniShell
先上成果图 源代码 仅供技术点的分享,抄袭者就算了,所以main.c就不贴了 /* * split_line.c */ #include <stdio.h> #include <st ...
- C#辗转相除法输出最大公约数
void main() { int r, m, n, t; scanf_s("%d\n%d", &m, &n); if (m < n) { t = m; m ...
- 2023 年 CCF 春季测试赛模拟赛 - 2
T1 分治,\(a^b + \dots + 1 = (a^{\lfloor\frac{b}{2}\rfloor} + \dots + 1) \times (a^{\lfloor\frac{b}{2}\ ...
- wandb: Network error (ConnectionError), entering retry loop.
超算使用wandb总是连接超时,设置为offline模式即可 import os import wandb os.environ["WANDB_API_KEY"] = 'KEY' ...
- ts(keyof,typeof)
ts(keyof,typeof) keyof 获取某类型的键,返回联合类型 interface Person { hair: string; eyesColor: string; } let P1 = ...