Seu problema imediato é que tr
não faz o que você acha que faz. tr
realiza a substituição de caractere , não a substituição de string. O comando tr "tokenized" "sampa"
substitui t
por s
, o
por a
, k
por m
, ( e
by p
é substituído por uma ocorrência subseqüente de e
), e n
, i
, z
, e
e d
por a
.
Para executar uma substituição de string, você pode usar sed. Mas isso é um tanto inconveniente e difícil de acertar. Para manipulação simples de strings, use as construções de manipulação de strings do shell em vez de ferramentas externas.
Tcsh não possui construções de manipulação de strings. Mas (t) csh não tem sido um shell de linha de comando nível 1 nos últimos 20 anos, e nunca foi bom para o script . Apenas não escreva scripts csh.
Além disso:
- Nunca defina
LC_ALL
como algo diferente deC
(ou seu sinônimoPOSIX
).LC_ALL
substitui todas as categorias e isso pode causar problemas. Para definir um padrão para todas as categorias, useLANG
. Mas nos scripts,C
é geralmente o que você precisa, excetoLC_CTYPE
(conjunto de caracteres) eLC_MESSAGES
(mensagens para o usuário). - A manipulação de strings em sh é feita por meio da expansão de parâmetros .
- O sh simples não tem nenhuma construção de substituição de strings, mas o bash faz.
- Sempre use o dobro citações em torno de substituições de variáveis
#!/bin/bash
export LC_ALL=C
for f in /home/users0/me/master/me/LookupScripts/Tokenized/*.txt; do
g="${f##*/}"
h="${g//tokenized/sampa}"
./a4.lookup <"$f" >"Sampa/$h.txt"
end