如何打印列中的字符串?

如何打印列中的字符串?

我有一个具有以下格式的字符串:

A B C D

如何在一列中具有相同的模式?

答案1

从此字符串开始:

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

$ printf '%s\n' A B C D
A
B
C
D

printf命令是大多数 shell 中的内置命令,它采用包含一个或多个占位符的格式化字符串。该%s字符串是“字符串”的占位符(这是 shell 中最常见的字符串)。如果给出了更多参数,printf那么格式字符串中就有占位符(如本例所示),整个格式字符串将被一次又一次应用,直到参数列表用完。由于\n格式字符串的末尾有一个(换行符),因此您将在自己的行上得到每个字母。

如果变量中有字符串:

str='A B C D'
printf '%s\n' $str

这将得到与上面相同的结果。扩展$str是不带引号的,这意味着字符串的内容将在空格上拆分(变量中的字符IFS将用于将字符串拆分为单词,并且该变量默认包含空格、制表符和换行符)。请注意,如果字符串包含文件名通配字符,例如*,则将输出与这些模式匹配的文件名。通过设置noglobshell 选项(使用set -fset -o noglob),您可以避免这种情况:

str='A B C D *'
set -f
printf '%s\n' $str
set +f

相关内容