使用 sed 将换行符转换为空格

Ame*_*ina 26 shell sed

假设我有一个 shell 变量$string,其中包含一些带有多个换行符的文本,例如:

string="this
is 
a test"
Run Code Online (Sandbox Code Playgroud)

我想将此字符串转换为一个新字符串new_string,其中所有换行符都转换为空格:

new_string="this is a test"
Run Code Online (Sandbox Code Playgroud)

我试过:

print $string | sed 's/\n/ /g'
Run Code Online (Sandbox Code Playgroud)

但它没有用

我也想知道是否有办法使用perl -0777 's/\n/ /g'或命令来做到这一点 tr

小智 42

如果您只想删除字符串中的新行,则不需要使用sed. 你可以只使用

$  echo "$string" | tr '\n' ' '
Run Code Online (Sandbox Code Playgroud)

正如其他人所指出的那样。

但是,如果您想使用 将文件中的新行转换为空格sed,则可以使用:

$ sed -i ':a;N;$!ba;s/\n/\t/g' file_with_line_breaks
Run Code Online (Sandbox Code Playgroud)

甚至awk

$ awk '$1=$1' ORS=' ' file_with_line_breaks > new_file_with_spaces
Run Code Online (Sandbox Code Playgroud)

  • `sponge` 是一个用于覆盖输入文件的有用实用程序。它是“moreutils”包的一部分...例如。`awk '$1=$1' ORS=' ' 文件 |海绵文件` (2认同)

Pet*_*r.O 10

如果您已经将字符串作为 bash 变量,如您的示例所示,那么调用sedawkprintf等毫无意义且浪费资源(以及更多的输入)...您可以只使用bash 变量扩展

string="${string//$'\n'/ }"
Run Code Online (Sandbox Code Playgroud)

您甚至不必重新分配它。您可以按原样使用扩展,并保持$string不变。

printf "${string//$'\n'/ }" >file
Run Code Online (Sandbox Code Playgroud)


Mar*_*try 7

您可以尝试使用tr

echo "$string" | tr '\n' ' '
Run Code Online (Sandbox Code Playgroud)


小智 6

另一种选择是使用xargs(此外,它会挤压多个空白):

string="this
    is 
a    test"

printf "$string" | xargs   # this is a test
Run Code Online (Sandbox Code Playgroud)


Avi*_*Raj 5

你也可以尝试这个 awk 命令,

awk -v RS="" '{gsub (/\n/," ")}1' file
Run Code Online (Sandbox Code Playgroud)

例子:

$ (echo This; echo is; echo a; echo test.) | awk -v RS="" '{gsub (/\n/," ")}1'
This is a test.
Run Code Online (Sandbox Code Playgroud)