열에 문자열을 인쇄하는 방법은 무엇입니까? [복사]

열에 문자열을 인쇄하는 방법은 무엇입니까? [복사]

다음 형식의 문자열이 있습니다.

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명령은 대부분의 셸에 내장된 명령이며 하나 이상의 자리 표시자가 포함된 형식화된 문자열을 사용합니다. 이 %s문자열은 "string"(셸에서 가장 일반적인 문자열)에 대한 자리 표시자입니다. 더 많은 인수가 제공되면 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

관련 정보