Начиная с этой строки:
s='A B C D'
Если мы хотим, чтобы он печатался как столбец, мы можем использовать bash:
$ echo "${s// /$'\n'}"
A
B
C
D
Или, используяsed
:
$ sed 's/ /\n/g' <<<"$s"
A
B
C
D
Или, используяtr
:
$ tr ' ' '\n' <<<"$s"
A
B
C
D
Или, используяawk
:
$ awk '$1==$1' RS=' ' ORS='\n' <<<"$s"
A
B
C
D
Или, используяgrep
:
$ grep -o '[[:alpha:]]' <<<"$s"
A
B
C
D
$ printf '%s\n' A B C D
A
B
C
D
Команда printf
, встроенная -в команду в большинстве оболочек, принимает строку форматирования, содержащую один или несколько заполнителей. Строка %s
является заполнителем для «строки» (, которая чаще всего используется в оболочке ). Если для printf
задано больше аргументов, то в строке формата (есть заполнители, как в этом случае ), вся строка формата будет применяться снова и снова, пока список аргументов не будет исчерпан. Поскольку в конце строки формата есть символ новой строки\n
(), каждая буква будет располагаться на отдельной строке.
Если у вас есть строка в переменной:
str='A B C D'
printf '%s\n' $str
Это будет иметь тот же результат, что и выше. Расширение $str
не заключено в кавычки, что означает, что содержимое строки будет разбито на пробелы (символы в переменной IFS
будут использоваться для разделения строки на слова, и эта переменная по умолчанию содержит пробел, табуляция и новая строка ). Обратите внимание, что если строка содержит подстановочные символы имени файла, такие как *
, то будут выведены имена файлов, соответствующие этим шаблонам. Установив параметр оболочки noglob
(с помощью set -f
или set -o noglob
), вы можете избежать этого:
str='A B C D *'
set -f
printf '%s\n' $str
set +f