求助:文本文件匹配删除
- nyfair
- 帖子: 1067
- 注册时间: 2007-12-07 12:49
- 系统: winnux10
- 来自: Tree New Bee
求助:文本文件匹配删除
有个文本文件里面有很多这样的东西
ifneq ($(TEST) 1)
...
...
...
endif
有没有什么能把所有从ifneq开始到下个endif为止所有行都删除的办法
虽然可以直接改TEST,但是留着那砣东西太碍眼了
ifneq ($(TEST) 1)
...
...
...
endif
有没有什么能把所有从ifneq开始到下个endif为止所有行都删除的办法
虽然可以直接改TEST,但是留着那砣东西太碍眼了
本人在此论坛仅负责吐槽,问题急需解决请支付宝转账5毛至{我的[email protected]},将会竭诚为您服务
linux常见多媒体问题处理指南
1. 视频播放有问题->卸载gstreamer
2. 音频播放有问题->卸载pulseaudio
3. 远程播放有问题->卸载avahi
4. 系统全都有问题->卸载systemd,远离Lennart这傻逼让你从此轻松自在
⇩自由网络⇩
https://github.com/nyfair/freeweb
linux常见多媒体问题处理指南
1. 视频播放有问题->卸载gstreamer
2. 音频播放有问题->卸载pulseaudio
3. 远程播放有问题->卸载avahi
4. 系统全都有问题->卸载systemd,远离Lennart这傻逼让你从此轻松自在
⇩自由网络⇩
https://github.com/nyfair/freeweb
- josephyoung
- 帖子: 158
- 注册时间: 2011-11-05 18:53
- 来自: 南极圈
Re: 求助:文本文件匹配删除
代码: 全选
awk '/ ?ifneq ?\(/{while($0 !~ /endif/)getline;getline}1'
- josephyoung
- 帖子: 158
- 注册时间: 2011-11-05 18:53
- 来自: 南极圈
Re: 求助:文本文件匹配删除
如果有嵌套的,就麻烦一点
有嵌套的也搞出来了

代码: 全选
awk '/ ?ifneq ?\(/{T=0;while($0 !~ /endif/ || T!=1){if($0 ~ /endif/)T--;if($0 ~ / ?ifneq ?\(/)T++;getline;}getline}1'
上次由 josephyoung 在 2012-02-08 22:53,总共编辑 1 次。
- nyfair
- 帖子: 1067
- 注册时间: 2007-12-07 12:49
- 系统: winnux10
- 来自: Tree New Bee
Re: 求助:文本文件匹配删除
嗯,没有嵌套的
非常感谢
非常感谢
本人在此论坛仅负责吐槽,问题急需解决请支付宝转账5毛至{我的[email protected]},将会竭诚为您服务
linux常见多媒体问题处理指南
1. 视频播放有问题->卸载gstreamer
2. 音频播放有问题->卸载pulseaudio
3. 远程播放有问题->卸载avahi
4. 系统全都有问题->卸载systemd,远离Lennart这傻逼让你从此轻松自在
⇩自由网络⇩
https://github.com/nyfair/freeweb
linux常见多媒体问题处理指南
1. 视频播放有问题->卸载gstreamer
2. 音频播放有问题->卸载pulseaudio
3. 远程播放有问题->卸载avahi
4. 系统全都有问题->卸载systemd,远离Lennart这傻逼让你从此轻松自在
⇩自由网络⇩
https://github.com/nyfair/freeweb
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
-
- 帖子: 6548
- 注册时间: 2008-10-31 22:12
- 系统: 践兔
- 联系:
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- josephyoung
- 帖子: 158
- 注册时间: 2011-11-05 18:53
- 来自: 南极圈
Re: 求助:文本文件匹配删除
我3楼的那个代码可以处理嵌套的tusooa 写了:这貌似不能处理嵌套的吧。
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 求助:文本文件匹配删除
kose-1@kose-1-desktop:~$ cat filejosephyoung 写了:我3楼的那个代码可以处理嵌套的tusooa 写了:这貌似不能处理嵌套的吧。
ifneq ($(TEST) 1)
...
...
...
endif
kose-1@kose-1-desktop:~$ awk '/ ?ifneq ?\(/{while($0 !~ /endif/)getline;getline}1' file
endif
#先改改bug。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 求助:文本文件匹配删除
kose-1@kose-1-desktop:~$ cat file
..."1*ifneq"...
ifneq ($(TEST) 1)
..."ifneq"...
ifneq ($(TEST) 1)
...
..."endif"...
endif
..."endif"...
endif
..."2*endif"...
..."3*ifneq"...
ifneq ($(TEST) 1)
..."ifneq"...
ifneq ($(TEST) 1)
...
..."endif"...
ifneq ($(TEST) 1)
...
..."endif"...
endif
ifneq ($(TEST) 1)
...
..."endif"...
endif
endif
..."endif"...
endif
..."4*endif"...
kose-1@kose-1-desktop:~$ sed -nr '1h;2,$H;${x;s/(^|\n)ifneq \([^\n]*/\x1a/g;s/\nendif(\n|$)/\x1b\1/g;s/(\x1a[^\x1b]+)+(\x1b[^\x1a]+)*\x1b//g;p}' file
..."1*ifneq"...
..."2*endif"...
..."3*ifneq"...
..."4*endif"...
#用sed玩嵌套(不考虑tab)
..."1*ifneq"...
ifneq ($(TEST) 1)
..."ifneq"...
ifneq ($(TEST) 1)
...
..."endif"...
endif
..."endif"...
endif
..."2*endif"...
..."3*ifneq"...
ifneq ($(TEST) 1)
..."ifneq"...
ifneq ($(TEST) 1)
...
..."endif"...
ifneq ($(TEST) 1)
...
..."endif"...
endif
ifneq ($(TEST) 1)
...
..."endif"...
endif
endif
..."endif"...
endif
..."4*endif"...
kose-1@kose-1-desktop:~$ sed -nr '1h;2,$H;${x;s/(^|\n)ifneq \([^\n]*/\x1a/g;s/\nendif(\n|$)/\x1b\1/g;s/(\x1a[^\x1b]+)+(\x1b[^\x1a]+)*\x1b//g;p}' file
..."1*ifneq"...
..."2*endif"...
..."3*ifneq"...
..."4*endif"...
#用sed玩嵌套(不考虑tab)
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
- josephyoung
- 帖子: 158
- 注册时间: 2011-11-05 18:53
- 来自: 南极圈
Re: 求助:文本文件匹配删除
谢谢指正fnan 写了:kose-1@kose-1-desktop:~$ cat filejosephyoung 写了:我3楼的那个代码可以处理嵌套的tusooa 写了:这貌似不能处理嵌套的吧。
ifneq ($(TEST) 1)
...
...
...
endif
kose-1@kose-1-desktop:~$ awk '/ ?ifneq ?\(/{while($0 !~ /endif/)getline;getline}1' file
endif
#先改改bug。
代码: 全选
awk '/ ?ifneq ?\(/{T=0;while($0 !~ /endif/ || T!=1){if($0 ~ /endif/)T--;if($0 ~ / ?ifneq ?\(/)T++;getline;}next}1' file
- josephyoung
- 帖子: 158
- 注册时间: 2011-11-05 18:53
- 来自: 南极圈
Re: 求助:文本文件匹配删除
帅呆了fnan 写了:sed -nr '1h;2,$H;${x;s/(^|\n)ifneq \([^\n]*/\x1a/g;s/\nendif(\n|$)/\x1b\1/g;s/(\x1a[^\x1b]+)+(\x1b[^\x1a]+)*\x1b//g;p}' file
#用sed玩嵌套(不考虑tab)

- fanhe
- 帖子: 2357
- 注册时间: 2007-03-24 23:45
Re: 求助:文本文件匹配删除
不喜欢shell了,脚本现在都直接写 python
- josephyoung
- 帖子: 158
- 注册时间: 2011-11-05 18:53
- 来自: 南极圈
Re: 求助:文本文件匹配删除
fanhe 写了:不喜欢shell了,脚本现在都直接写 python

-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 求助:文本文件匹配删除
#嵌套再加复杂一点就显出bug了,还是老老实实用循环可靠,效率低一些。josephyoung 写了:帅呆了fnan 写了:sed -nr '1h;2,$H;${x;s/(^|\n)ifneq \([^\n]*/\x1a/g;s/\nendif(\n|$)/\x1b\1/g;s/(\x1a[^\x1b]+)+(\x1b[^\x1a]+)*\x1b//g;p}' file
#用sed玩嵌套(不考虑tab)特别是这个正则/(\x1a[^\x1b]+)+(\x1b[^\x1a]+)*\x1b/,学习了
kose3@kose3-desktop:~$ cat file2
..."1*ifneq"...
ifneq ($(TEST) 1)
..."ifneq"...
ifneq ($(TEST) 1)
...
..."endif"...
endif
..."endif"...
endif
..."2*endif"...
..."3*ifneq"...
ifneq ($(TEST) 1)
..."ifneq"...
ifneq ($(TEST) 1)
...
..."endif"...
ifneq ($(TEST) 1)
...
..."endif"...
endif
..."xxx"...
ifneq ($(TEST) 1)
...
..."endif"...
endif
endif
..."endif"...
endif
..."4*endif"...
kose3@kose3-desktop:~$ sed -nr '1h;2,$H;${x;s/(^|\n)ifneq \([^\n]*/\x1a/g;s/\nendif/\x1b/g; :A;s/\x1a[^\x1b\x1a]+\x1b//g;tA;p}' file2
..."1*ifneq"...
..."2*endif"...
..."3*ifneq"...
..."4*endif"...
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。