Kiw*_*iwy 2 linux bash awk grep sed
我想做点什么,但我不知道该怎么做.我有一个23 Mo的文件:
: (blah
:aaaaaaaaaaaaaaaaaaaa
(bbbbbbbbbbbbbbbbbbbb
: (bloh
cccccccc
dddddddd
...
Run Code Online (Sandbox Code Playgroud)
等等.我喜欢做的是删除所有行跳转"\n",除非\n后跟":("
所以最终文件将是:
: (blah :aaaaaaaaaaaaaaaaaaaa (bbbbbbbbbbbbbbbbbbbb
: (bloh cccccccc dddddddd
...
Run Code Online (Sandbox Code Playgroud)
我有几个想法要做,第一个是:
- 用sed 删除所有"\n"
- 替换所有":(" by "\n :("
但问题是文件是23MO我不知道如何在23mo的一行文件上管理这个.
第二个想法,但我仍然不知道如何做,是:
- 删除每个"\n",除非它匹配模式"\n :("
我不知道如何.
我只限于bash perl sed grep和awk作为ressource.
我真的很想得到你的意见.
祝你今天愉快.
我们可以通过定义awk的记录和字段分隔符变量来完成大部分工作:
awk 'NR==1 {next} {$1=$1; print ": (" $0}' RS=': \(' FS='\n' OFS="" filename
Run Code Online (Sandbox Code Playgroud)
由于文件以我们定义的记录分隔符开头,因此我们会跳过一条空的第一条记录.
相同的程序,更具可读性
awk '
BEGIN {FS="\n"; OFS=""; RS=": \("; prefix=": ("}
NR==1 {next}
{$1=$1; print prefix $0}
' filename
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |