Chinaunix
标题:
求教 文本处理 在特定字段后添加 字段
[打印本页]
作者:
shintoky
时间:
2014-04-01 10:35
标题:
求教 文本处理 在特定字段后添加 字段
如下6行文本,如何插入特定字段"specail{test}"
要求在 以包含key-word 为关键字的 ,之后第一个以add 为开始; 在add {} 的结尾位置 插入特定字段
remote dc-123 { file("/aa/
key-word
/aa" owner("a") group("b") perm (0640)); };
filter f_dc-123 { host("dc-123") and not match("xyz" value(MSG)); };
add { source(net); filter(f_dc-123); remote(dc-123); };
special {test}
remote dc-124 { file("/aa/
non-keyword
/aa" owner("a") group("b") perm (0640)); };
filter f_dc-124 { host("dc-124") and not match("xyz" value(MSG)); };
add { source(net); filter(f_dc-124); remote(dc-124); };
作者:
yestreenstars
时间:
2014-04-01 10:48
sed '/key-word/,/^add/{/^add/s/$/special {test}/}'
复制代码
sed '/key-word/{:1;n;/^add/!b1;s/$/special {test}/}'
复制代码
作者:
shintoky
时间:
2014-04-01 10:54
回复
2#
yestreenstars
我了个去 大神你是星星来的吧
作者:
shintoky
时间:
2014-04-01 11:04
回复
2#
yestreenstars
俄 不好意思 我前面写的有点问题, 应该在括号里面
add { source(net); filter(f_dc-123); remote(dc-123);
special {test};
};
作者:
yestreenstars
时间:
2014-04-01 11:18
本帖最后由 yestreenstars 于 2014-04-01 23:28 编辑
回复
4#
shintoky
自己手动改一下就好啦:
sed '/key-word/,/^add/{/^add/s/}/special {test}; &/}'
复制代码
sed '/key-word/{:1;n;/^add/!b1;s/}/special {test}; &/}'
复制代码
作者:
jason680
时间:
2014-04-01 12:10
回复
4#
shintoky
$ awk '/key-word/{P=1}P==1&&/^add /{$NF="special {test}; "$NF;P=0;}1' FILE
remote dc-123 { file("/aa/key-word/aa" owner("a") group("b") perm (0640)); };
filter f_dc-123 { host("dc-123") and not match("xyz" value(MSG)); };
add { source(net); filter(f_dc-123); remote(dc-123);
special {test};
};
remote dc-124 { file("/aa/non-keyword/aa" owner("a") group("b") perm (0640)); };
filter f_dc-124 { host("dc-124") and not match("xyz" value(MSG)); };
add { source(net); filter(f_dc-124); remote(dc-124); };
作者:
shintoky
时间:
2014-04-01 12:11
回复
5#
yestreenstars
谢谢啦!
作者:
shintoky
时间:
2014-04-01 12:37
回复
6#
jason680
appreciate as well !
作者:
Herowinter
时间:
2014-04-01 22:20
@yestreenstars
@jason680
拜读完代码,两位大神的深藏功与名不禁使我激动的心情
久久不能平复。那高大上的代码,简单高效的回复,深入
浅出的讲解,使我等写无可写。
作者:
shintoky
时间:
2014-04-02 09:52
回复
9#
Herowinter
作者:
shintoky
时间:
2014-04-02 17:11
回复
5#
yestreenstars
大神,我今天抽空研究了一下,发现使用下面的也可以达到目的
sed '/key-word/,/^add/s/}/special {test}; &/' file
那么为什么要多加一个add ? 有什么特殊意义?
sed '/key-word/,/^add/{/^add/s/}/special {test}; &/}'
作者:
yestreenstars
时间:
2014-04-02 17:15
回复
11#
shintoky
[root@localhost ~]# sed '/key-word/,/^add/{/^add/s/}/special {test}; &/}' i
remote dc-123 { file("/aa/key-word/aa" owner("a") group("b") perm (0640)); };
filter f_dc-123 { host("dc-123") and not match("xyz" value(MSG)); };
add { source(net); filter(f_dc-123); remote(dc-123);
special {test};
};
remote dc-124 { file("/aa/non-keyword/aa" owner("a") group("b") perm (0640)); };
filter f_dc-124 { host("dc-124") and not match("xyz" value(MSG)); };
add { source(net); filter(f_dc-124); remote(dc-124); };
[root@localhost ~]# sed '/key-word/,/^add/s/}/special {test}; &/' i
remote dc-123 { file("/aa/key-word/aa" owner("a") group("b") perm (0640));
special {test};
};
filter f_dc-123 { host("dc-123") and not match("xyz" value(MSG));
special {test};
};
add { source(net); filter(f_dc-123); remote(dc-123);
special {test};
};
remote dc-124 { file("/aa/non-keyword/aa" owner("a") group("b") perm (0640)); };
filter f_dc-124 { host("dc-124") and not match("xyz" value(MSG)); };
add { source(net); filter(f_dc-124); remote(dc-124); };
作者:
shintoky
时间:
2014-04-03 15:18
回复
12#
yestreenstars
哦哦 对哦 还是想不明白为什么要 多加一个^add ? 不是已经定义 从 add 开始修改么?
作者:
yestreenstars
时间:
2014-04-03 15:50
回复
13#
shintoky
/key-word/,/^add/相当于匹配1-3行,如果不在s/}/special {test}; &/操作前加上/^add/的话,它会把1-3的都替换掉,但是如果加上之后,就只会对匹配到/^add/的行,也就是第3行进行替换。
作者:
shintoky
时间:
2014-04-04 09:12
回复
14#
yestreenstars
恩恩 现在明白了 多谢赐教
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2