como imprimir uma string em uma coluna? [duplicado]

0

Eu tenho uma string com este formato:

A B C D

Como posso ter o mesmo padrão em uma coluna?

    
por Luca 15.03.2018 / 08:00

2 respostas

2

Começando com essa string:

s='A B C D'

Se quisermos imprimir como uma coluna, podemos usar o bash:

$ echo "${s// /$'\n'}"
A
B
C
D

Ou usando sed :

$ sed 's/ /\n/g' <<<"$s"
A
B
C
D

Ou usando tr :

$ tr ' ' '\n' <<<"$s"
A
B
C
D

Ou usando awk :

$ awk '$1==$1' RS=' ' ORS='\n' <<<"$s"
A
B
C
D

Ou usando grep :

$ grep -o '[[:alpha:]]' <<<"$s"
A
B
C
D
    
por 15.03.2018 / 08:03
0
$ printf '%s\n' A B C D
A
B
C
D

O comando printf , que é um comando interno na maioria dos shells, usa uma string de formatação contendo um ou vários marcadores de posição. A string %s é o espaço reservado para "uma string" (que é o que você mais comumente tem no shell). Se houver mais argumentos dados para printf , em seguida, há espaços reservados na seqüência de formato (como neste caso), a seqüência de formato inteiro será aplicada novamente até que a lista de argumentos seja esgotada. Como existe um \n (newline) no final da string de formatação, você terá cada letra em sua própria linha.

Se você tiver a string em uma variável:

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

Isso terá o mesmo resultado acima. A expansão $str não é citada, o que significa que o conteúdo da string será dividido nos espaços (os caracteres na variável IFS serão usados para dividir a string em palavras, e essa variável contém por padrão um espaço, tabulação e uma nova linha). Observe que, se a cadeia contiver caracteres globbing de nome de arquivo, como * , os nomes de arquivos correspondentes a esses padrões serão gerados. Ao definir a opção noglob shell (com set -f ou set -o noglob ), você pode evitar isso:

str='A B C D *'
set -f
printf '%s\n' $str
set +f
    
por 15.03.2018 / 08:27