Substitui uma string em uma string por uma nova linha (\ n) no Bash

5

Eu tentei este comando:

[silas@mars 11]$ string=xyababcdabababefab
[silas@mars 11]$ echo ${string/abab/"\n"}
xy\ncdabababefab
[silas@mars 11]$

Eu também tentei substituir "\ n" para '\ n' e para \ n. Eu não posso usar AWK ou sed (isso é uma parte de um exercício de lição de casa, e o professor não permite usar neste exercício específico).

    
por Silas2033 16.01.2016 / 11:07

3 respostas

7

Você deve usar -e com echo da seguinte forma:

echo -e ${string/abab/'\n'}

Da página de manual:

-e     enable interpretation of backslash escapes

If -e is in effect, the following sequences are recognized:

\     backslash

\a     alert (BEL)

\b     backspace

\c     produce no further output

\e     escape

\f     form feed

\n     new line

\r     carriage return

\t     horizontal tab

\v     vertical tab
    
por 16.01.2016 / 11:28
12

Use a sequência de escape do estilo ANSI C $'\n' para indicar nova linha:

$ string=xyababcdabababefab

$ echo "${string/abab/$'\n'}"
xy
cdabababefab

Ou use zsh para usar apenas \n :

% string=xyababcdabababefab

% echo "${string/abab/\n}"
xy
cdabababefab
    
por 16.01.2016 / 11:29
6

Além de acima, use a nova linha por si só:

echo "${string/abab/
}"

observe as citações para evitar a substituição de ewline \n por space
A versão antiga do bash pode ser adequada:

printf "%s\n" "${string%%abab*}" "${string#*abab}"
    
por 16.01.2016 / 14:06

Tags