假设我有一个 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)
Pet*_*r.O 10
如果您已经将字符串作为 bash 变量,如您的示例所示,那么调用sed、awk、printf等毫无意义且浪费资源(以及更多的输入)...您可以只使用bash 变量扩展:
string="${string//$'\n'/ }"
Run Code Online (Sandbox Code Playgroud)
您甚至不必重新分配它。您可以按原样使用扩展,并保持$string不变。
printf "${string//$'\n'/ }" >file
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)
你也可以尝试这个 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)
| 归档时间: |
|
| 查看次数: |
85528 次 |
| 最近记录: |