更新:字符串中最多有 2 个“/”。
字符串结构可以是:
字符集名称/LF
字符集名称/CRLF 字符集名称/CRLF/(用途未知,可能是数字)
字符集名称
例如:“UTF-8/CRLF”
“UCS-2/CRLF/21”
也就是说,可能只有字符集名称(事先未知),而没有任何“/”分隔符。
字符集名称可以包含“-”和“_”(此处无需分隔)。
需要分配给:
VAR1=字符集名称
VAR2=第一个“/”和第二个“/”之间的CRLF 或 LF 部分(如果没有“/”,则为空字符串)。
VAR3=第二个“/”后的剩余部分。
VAR2 的某种真/假(0/1)也是可以的(它将在脚本的后面用 if/else 进行处理)。
已尝试cut -d/ -f
,但即使没有“/”cut -d/ -f 2
也会返回“字符集名称” ,所以它对我来说不起作用。
对于Bash脚本,最好使用更快的解决方案,因为它将运行多次。
我确实需要调用一个函数,因为/bin/bash -c
它在 中被调用find -exec
。
代码(主要基于 Choroba 的回答):
#!/bin/bash
shopt -s extglob
function convert_single_text_file_to_utf8(){
CUR_FILE_ENCODING_WITH_CRLF=$1
echo "CUR_FILE_ENCODING_WITH_CRLF=${CUR_FILE_ENCODING_WITH_CRLF}"
CUR_FILE_ENCODING_ONLY=${CUR_FILE_ENCODING_WITH_CRLF%%/*} # Remove everything starting from the last slash.
LINE_FEED=${CUR_FILE_ENCODING_WITH_CRLF##$CUR_FILE_ENCODING_ONLY?(/)} # Remove the charset, followed by a slash if any.
echo "CUR_FILE_ENCODING_ONLY=${CUR_FILE_ENCODING_ONLY} LINE_FEED=${LINE_FEED}"
}
export -f convert_single_text_file_to_utf8
for ENCODING in ASCII UTF-8/CRLF ISO-8859-2/LF EBCDIC-CA-FR; do
echo "ENCODING=$ENCODING"
export ENCODING
/bin/bash -c 'shopt -s extglob; convert_single_text_file_to_utf8 "$ENCODING" '
done