Atualização: Até 2 "/" na string.
A estrutura da string é:
Nome do conjunto de caracteres/LF
Nome do conjunto de caracteres/CRLF Nome do conjunto de caracteres/CRLF/(finalidade desconhecida, provavelmente um número)
Nome do conjunto de caracteres
Exemplo: "UTF-8/CRLF"
"UCS-2/CRLF/21"
Ou seja, pode haver apenas o nome do conjunto de caracteres (desconhecido de antemão) sem nenhum separador "/".
O nome do conjunto de caracteres pode conter "-" e "_" (não há necessidade de separar aqui).
Precisa atribuir a:
VAR1=Nome do conjunto de caracteres
VAR2=CRLF ou parte LF entre o 1º "/" e o 2º "/" (ou string vazia se não houver "/").
VAR3=Restante após 2º "/".
Algum tipo de verdadeiro/falso (0/1) para VAR2 também está OK (será processado com if/else mais tarde no script).
Tentei cut -d/ -f
, mas cut -d/ -f 2
retorna "Nome do conjunto de caracteres" mesmo que não haja "/" , então não funciona para mim.
Para script Bash, uma solução mais rápida é preferível, pois ele será executado muitas vezes.
Preciso chamar uma função porque /bin/bash -c
ela é chamada em find -exec
.
Código (baseado principalmente na resposta de 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
Você pode dividir a string em uma matriz indexada
var
usando oread
comando interno do shell bash e, em seguida, recuperar as partes como${var[0]}
por meio de${var[2]}
:Você pode usar expansão de parâmetros para remover substrings iniciais ou finais de variáveis. Elas se tornam ainda mais poderosas com
extglob
(usado para a?(/)
construção que corresponde a uma barra, se houver uma).