gpt4 book ai didi

linux - 如何区分带有 DOS 换行符的文件和 shell 脚本

转载 作者:太空宇宙 更新时间:2023-11-04 09:24:07 25 4
gpt4 key购买 nike

我正在尝试编写一个 shell 脚本,它可以确定输入文件中的行是以 DOS (CR/LF) 还是 Unix (LF) 换行结尾。

我怎样才能做出这个决定?

最佳答案

如果检查第一行就足够了,比如

perl -ne 'exit ($_ =~ /\r$/)' file

您可以在 Bash 中做同样的事情;

lffile () {
local REPLY
read -r <"$1"
case $REPLY in *$'\r') return 1;; *) return 0;; esac
}

这需要 $'\r' Bash >= 3.x 的 C 风格字符串。如果您可以可靠且可移植地在脚本中嵌入文字回车符,您甚至可以为此使用 sh,只需稍作更改。下面使用讨厌的全局来保存回车符:

lffile_cr=$(printf '\r')
lffile () {
# local is not POSIX; simply overwrite REPLY
read -r <"$1"
case $REPLY in *"$lffile_cr") return 1;; *) return 0;; esac
}

在最一般的情况下,一个文件可能有混合的行尾,但如果我们假设行尾是一致的(和/或对于那个模糊的角落案例获得 50% 的命中率或未命中率是可以接受的),阅读第一行就足够了。

关于linux - 如何区分带有 DOS 换行符的文件和 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38601644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com