Bashで、文字列の文字列を改行文字(\ n)に置き換えます。

Bashで、文字列の文字列を改行文字(\ n)に置き換えます。

私は次のコマンドを試しました。

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

また、「\n」を「\n」と \n に置き換えようとしました。 AWKやsedは使用できません(宿題の練習の一部であり、教師はこの特定の練習ではこれを許可しません)。

答え1

ANSI C スタイルのエスケープシーケンスを使用して$'\n'改行を表します。

$ string=xyababcdabababefab

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

またはzsh単に使用してください\n

% string=xyababcdabababefab

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

答え2

使用する必要があります-e次のようにecho:

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

マンページから:

-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

答え3

上記に加えて、改行文字を単独で使用することができます。

echo "${string/abab/
}"

\newline代替参照を避けるために、以前のbashバージョンの場合を使用することがspace
適切かもしれません。

printf "%s\n" "${string%%abab*}" "${string#*abab}"

関連情報