我有一个带有一些事件的文本日志文件,我想修改它以提高可读性和打印格式。
我有:
$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
任何帮助表示赞赏!谢谢!
答案 0 :(得分:3)
将记录设置为段落模式
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
答案 1 :(得分:2)
请您试着跟随并告诉我这是否对您有帮助。
gulp.task('minify-img', function(){
return imagemin(['./mobs/huge/*.png'], './mobs', {
plugins: [
imageminPngquant()
]
}).then(function(){
console.info("Images quant'd... is that a thing?!")
});
});
输出如下。
awk '/^[0-9]+\./{ORS=" "} !NF{ORS="\n"};1; END{ORS="";print RS}' Input_file
编辑: 此处还添加了一种非单一形式的解决方案,并附有说明。
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
答案 2 :(得分:1)
Perl救援:
perl -l -000 -pe 's/^|$/\n/g if 2 != s/\n/ /g' -- file
-000
启用"段落模式"它以空行分隔的块读取输入-l
从输入中删除输入分隔符并将其添加到输出s/\n/ /g
用空格替换所有换行符(在一个块中)并返回替换次数s/^|$/\n/g
在块的开头和结尾添加换行符答案 3 :(得分:0)
你可以试试这个awk版本:
awk '/\.$/{printf "%s ", $0; next} {print} your-file
答案 4 :(得分:0)
您可以使用此sed
sed ':A;$bB;N;/\n$/!bA;:B;s/\n//g;s/\(^[^0-9]*$\)/\n&\n/;1,2s/^\n//' myfile
sed '
:A
$bB # jump to B if last line
N # add a new line in the pattern space
/\n$/!bA # if this new line is empty, not return to A
:B
s/\n//g # remove all \n to get only one line
s/\(^[^0-9]*$\)/\n&\n/ # if the line not contain number add \n before and after
1,2s/^\n// # remove the \n before the first line
' myfile