linux - 使用 sed 或 awk 将某些行中的换行符替换为空格

标签 linux bash awk sed tr

我有一个包含一些事件的文本日志文件,我想修改它以提高可读性和打印格式。

我有:

$cat myfile 
foo bar foo bar

1.
1. foo bar
1:00

10.
3. foo bar
3:02

11.
4. foo
5:01

foobar foo

11.
foobar foo
3:48

2.
foobar foo
4:18

我想要的是:

$cat myfile
foo bar foo bar

1. 1. foo bar 1:00
10. 3. foo bar 3:02
11 4. foo 5:01

foobar foo

11. foobar foo 3:48
2. foobar foo 4:18

感谢任何帮助!谢谢!

最佳答案

通过将记录设置为段落模式

awk -v RS=  '{$1=$1}1'

你会得到

foo bar foo bar
1. 1. foo bar 1:00
10. 3. foo bar 3:02
11. 4. foo 5:01
foobar foo
11. foobar foo 3:48
2. foobar foo 4:18

要添加额外的空行,需要一些补充

awk -v RS=  '{$1=$1; t=!/[0-9]\./; 
              if(NR>1 && t) print ""; 
              print; 
              if(t) print ""}'

得到

foo bar foo bar

1. 1. foo bar 1:00
10. 3. foo bar 3:02
11. 4. foo 5:01

foobar foo

11. foobar foo 3:48
2. foobar foo 4:18

关于linux - 使用 sed 或 awk 将某些行中的换行符替换为空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47739706/

相关文章:

C++ Visual Studio 2012 到 Linux

linux - awk输出不会打印到文件

linux - 在 bash 中使用从字符串解析的数组

bash - 替换 cut --output-delimiter

linux - 检查 bash 中的正确列

linux - 在 Mac OS X 上使用 AWK 拆分文件

java - ap_proxy_connect_backend 为 (127.0.0.1) 禁用 worker

c++ - 有没有办法阻止用户注册/使用他自己的信号处理程序并始终使用特定的处理程序?

linux - k ubuntu - 找出命令执行源(cron?)

Linux:.sh 脚本中的程序没有输出