Sno*_*olf 6 bash character-encoding shell-script
我有一个文件,我想确定它是否只包含英文 ASCII 字符。
我以为这是一个很常见的问题,但是当我搜索它时,没有直接的答案或相关的答案。
根据其他一些问题,这是我到目前为止所得到的,但这不起作用。无论是 ASCII 还是非 ASCII 字符,它总是会被确定为非 ASCII。
if (LC_ALL=C; [[ $TEXT = *[[:ascii:]]* ]]) then
echo "Contain Non-ASCII"
fi
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这是一个shell脚本。
您的代码测试变量的值是否TEXT至少包含一个 ASCII 字符。如果要测试是否$TEXT包含非 ASCII 字符,则需要将集合取反。顺便说一下,[:ascii:]它与语言环境无关,因此您无需设置LC_CTYPE.
if [[ $TEXT = *[![:ascii:]]* ]]; then
echo "Contain Non-ASCII"
fi
Run Code Online (Sandbox Code Playgroud)
请注意,这[:ascii:]是一个 bash(和 zsh)功能。如果您希望您的脚本在 ksh 或普通 sh 中工作,您将需要使用语言环境。这是一个便携式方法:
LC_CTYPE=C
case $TEXT in
*[![:cntrl:][:print:]]*) echo "Contain Non-ASCII";;
esac
Run Code Online (Sandbox Code Playgroud)
如果要检查文件内容,请使用grep。
if LC_ALL=C grep -q '[^[:cntrl:][:print:]]' somefile; then
echo "Contain Non-ASCII"
fi
Run Code Online (Sandbox Code Playgroud)
该file命令可以告诉您文件的类型(ASCII、unicode、二进制等)。
$ file my_file.txt
my_file.txt: ASCII text
Run Code Online (Sandbox Code Playgroud)
因此,您只需检查输出是否包含单词“ASCII”,这应该可以工作:
if [[ file my_file.txt | grep -i ascii ]] ...
Run Code Online (Sandbox Code Playgroud)
Sno*_*olf -1
TEXT=SOMETEXTHERE
RESULT=$(echo $TEXT | LC_COLLATE=C grep -r '[^ -~]')
if [ -z "$RESULT" ]; then
echo "ALL ASCII"
else
echo "Contain Non-ASCII"
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21312 次 |
| 最近记录: |