как напечатать строку в столбце? [дубликат]

0
15.03.2018, 12:36
2 ответа

Начиная с этой строки:

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
2
28.01.2020, 02:32
$ 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
0
28.01.2020, 02:32

Теги

Похожие вопросы