comando para colocar o hífen na segunda coluna se o espaço for dado entre uma palavra [closed]

0

Suponha que você tenha um arquivo chamado test.txt com dados como:

you wel come
how nice
what do ing

Como posso adicionar um hífen na segunda coluna se o espaço é dado entre uma palavra?

    
por user152067 18.01.2016 / 16:42

2 respostas

4

Para substituir o segundo caractere de espaço de cada linha por um - :

$ sed 's/ /-/2' test.txt
you wel-come
how nice
what do-ing

Para substituir todos os caracteres de espaço de cada linha, exceto o primeiro, com GNU sed :

sed 's/ /-/2g'

a cada sed:

sed -e :1 -e 's/ /-/2;t1'

Para substituir todos os outros espaços por - em cada linha:

sed 's/\( [^ ]*\) /-/g'
    
por 18.01.2016 / 16:54
1

Eu faria o comando read com 2 nomes de variáveis. Isso vai sugar a primeira palavra na primeira variável e todas as outras palavras na segunda variável. Então eu posso usar a substituição de parâmetro bash para substituir espaços com hífens.

while read -r first rest; do
    echo "$first ${rest// /-}"
done < test.txt

Observe que isso não reduzirá o espaço em branco, por isso, se você tiver uma linha com vários espaços em branco entre palavras, como

hello     there     big     world

você receberá esta saída:

hello there-----big-----world

Se você preferir apenas um único hífen, poderá ler as palavras em uma matriz bash:

while read -ra words; do
    echo "${words[0]} $(IFS=-; echo "${words[*]:1}")"
done < test.txt
    
por 18.01.2016 / 16:55