linux下如何获得特定字符串前后几行文本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下如何获得特定字符串前后几行文本相关的知识,希望对你有一定的参考价值。

我想删除一个文件内的包含Merge的记录
我想删除第10行到第16行,我想在想到的是grep -v -A1 -B5 "Merge:" log > log.txt这样操作后还是有一些Merge记录保留,求大神帮忙。。。谢谢

2 commit ea6fc94fcbbbb77ae6b81fcae8671fa1158a0d86
3 Author: XXXXXXXXXXXXXXXXXXXXXX
4 Date: Tue Apr 22 18:17:50 2014 +0800
5
6 m~M~O佽CF~Om~M~Z屾1CBCMm~m~H~Z姩service<=5
7
8 Change-Id: I77b0ebd4ef84dc99d32d3229674df752e6dc30cc
9
10 commit cf6231f04dc5bd667839c8a8d13330a9d5186799
11 Merge: 87f183e 1273cba
12 Author: XXXXXXXXXXXXXXXXXXXXXX
13 Date: Tue Apr 22 17:49:37 2014 +0800
14
15 Merge "Fixed for BUG: Switching Display Mode(720P,1080P etc) cause wallpaper be cut in half bla
ck" into develop_4.4
16
17 commit 1273cba4090c1b31f3b9f29b36c9356d950d58b7
18 Author: XXXXXXXXXXXXXXXXXXXXXX
19 Date: Tue Apr 22 17:54:42 2014 +0800
20
21 Fixed for BUG: Switching Display Mode(720P,1080P etc) cause wallpaper be cut in half black
22
23 Change-Id: Idaf61250c2de88971bbf0d639f86f3d7077b955e
24

这行命令可以帮助你删除包含 Merge 的 commit 块(任意多个这样的文字块)

sed -n '/commit/:a;h;n;/Merge/b;:c;H;n;$bd;/commit/!bc;:d;x;p;x;ba' log > log.txt

运行效果如下:


我的命令可能复杂了些。稍微解释一下,仅供参考:

其中:a    :b    :c    :d    是命令跳转标签label

    /commit/:a;h;n;

    当某行找到 commit 时,将此行复制到 hold space,然后读取下一行。

    /Merge/b;

    如果刚刚读取到的新行,包含Merge,则结束对本行的处理,读取下一行,并继续寻找commit

    如果刚刚读取到的新行,不包含Merge,那么继续对本行执行后续命令:

    :c;H;n;$bd;/commit/!bc;:d;x;p;x;ba

    将此行追加到hold space,读取下一行,如果没有到最后一行,并且没有找到commit,那么执行命令bc,跳转到c标签——循环这个过程,直到读取到文件末尾或者读取到包含commit的行。然后,x,将hold space的内容与 pattern space的内容对调,p,输出pattern space的内容(即,不包含Merge的块),x,再次对调,pattern space变成之前的内容(文件末尾或者包含commit的行)。ba,跳转到标签a,继续对此行进行检查,重复步骤1,2,3。


如果上面的命令改为:

sed -n '/commit/:a;h;n;/Merge/!b;:c;H;n;$bd;/commit/!bc;:d;x;p;x;ba' log > log.txt

那么,输出结果为,只包含 Merge 的 commit 块

参考技术A 删除字符的, 就要使用命令工具sed了, 再配合正则使用, 比如纯字符[A-Zz-a]+
这样可以匹配你想要的字符集, 这个工具也会很强大的啊。
如果以后有遇到Linxu服务器的问题, 或者是是shell编程问题, Linux服务器运维问题, 系统管理, 都可以一起研究一下哦
参考技术B 这个得用脚本来处理了,比如:python。追问

python不会用|||

参考技术C sed /Merge:/,/Merge/d log > log.txt 参考技术D sed /awk 估计可以

如何更改 XLForm 禁用的行文本颜色 [XLFormRowDescriptorTypeText]

【中文标题】如何更改 XLForm 禁用的行文本颜色 [XLFormRowDescriptorTypeText]【英文标题】:How to change XLForm disabled row text color [XLFormRowDescriptorTypeText] 【发布时间】:2015-09-16 00:29:58 【问题描述】:

我有一个禁用的行:

XLFormRowDescriptor *row = ... XLFormRowDescriptorTypeText ...
row.disabled = @YES

默认情况下,禁用的行是灰色的,但我需要更改它的默认颜色。

我尝试设置它的 'textField.textColor' ,但这不起作用。

我的问题是,如何更改默认颜色?

【问题讨论】:

【参考方案1】:

这对我有用:

XLFormRowDescriptor *row = ... XLFormRowDescriptorTypeText ... row.disabled = @YES

[row.cellConfigIfDisabled setObject:[UIColor redColor] forKey:@"textLabel.textColor"];

【讨论】:

以上是关于linux下如何获得特定字符串前后几行文本的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode 中输入时,当前行文本字体大小会增加

linux如何实现,对某个文本循环查找多个字符串,并输出所在行的内容?

如何强制 Android 版 Mobile Vision 读取整行文本

如何在复杂条件下获得特定字符

java截取一个字符串正数或倒数某个特定字符前后的内容

浅谈Linux下简单排除字符串的几种方法(awksedgrep)