No es necesario un bucle de shell para analizar los datos:
$ awk -F '_' '{ for (i=1; i<=NF; ++i) print $i }' <<<'one_two_test_three'
one
two
test
three
El script analiza la entrada como una_
-lista delimitada e imprime cada campo.
Más corto:
$ awk -F '_' 'BEGIN { OFS="\n" } { $1=$1 } 1' <<< 'one_two_test_three'
one
two
test
three
Esto establece el separador de campo de salida en una nueva línea, luego fuerza una nueva -formación de todo el registro (con el nuevo separador insertado )antes de imprimir el registro.
Más corto:
$ tr '_' '\n' <<<'one_two_test_three'
one
two
test
three
Acceso a los datos en un bucle:
tr '_' '\n' <<<'one_two_test_three' |
while read -r word; do
printf 'Got "%s"\n' "$word"
done
De esta manera, no llama a la utilidad que usa para analizar los datos más de una vez.
Пожалуйста, ребята, не сердитесь на меня:)
Наконец-то я понял почему, что-то не так с моим PATH:
$ ssh localhost locale -a >/dev/null
$ which -a locale
/home/linuxbrew/.linuxbrew/bin/locale
/usr/bin/locale
$ /home/linuxbrew/.linuxbrew/bin/locale -a >/dev/null
/home/linuxbrew/.linuxbrew/bin/locale: Cannot set LC_CTYPE to default locale: No such file or directory
/home/linuxbrew/.linuxbrew/bin/locale: Cannot set LC_MESSAGES to default locale: No such file or directory
/home/linuxbrew/.linuxbrew/bin/locale: Cannot set LC_COLLATE to default locale: No such file or directory
$ /usr/bin/locale -a >/dev/null
$ /usr/bin/locale -a | egrep -i "(C|fr_FR|en_US).utf-?8"
C.UTF-8
en_US.utf8
fr_FR.utf8
locale-gen
не принимает никаких аргументов строки команды -. Вместо этого он читает /etc/locale.gen
для списка локалей, которые необходимо сгенерировать.
Отредактируйте /etc/locale.gen
, чтобы раскомментировать нужные локали, а затем снова запустите locale-gen
.
Или, если в /etc/locale.gen
нет закомментированных строк -, найдите список поддерживаемых локалей и скопируйте оттуда; в Debian (и, возможно, родственных дистрибутивах )вы можете найти такой список по адресу /usr/share/i18n/SUPPORTED
.