列に文字列を印刷するには? [コピー]

列に文字列を印刷するには? [コピー]

次の形式の文字列があります。

A B C D

1列に同じパターンを持つ方法は何ですか?

答え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コマンドはほとんどのシェルに組み込まれたコマンドであり、1つ以上のプレースホルダを含むフォーマットされた文字列を使用します。この%s文字列は、「string」(シェルで最も一般的な文字列) のプレースホルダです。より多くの引数が指定されると、フォーマット文字printf列にプレースホルダがあり(この例のように)、引数リストが使い果たされるまで、フォーマット文字列全体が引き続き適用されます。\nフォーマット文字列の末尾に(改行)があるので、各文字を1行に表示します。

変数に文字列がある場合:

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

関連情報