在 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/
}"

\n请注意,使用 For old bash version 来避免 ewline 替换的引用space
可能是合适的:

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

相关内容