다음 형식의 문자열이 있습니다.
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