- 论坛徽章:
- 0
|
有一个文本 由 [TIME]文本\n若干行文本\n[SQL_EXECUTE_TIME(ms)]文本\n 组成如下
[TIME]:2016-09-06 02:00:45
SELECT
balance_rule_id,
rule_type,
rule_desc
FROM acct_test.BALANCE_TYPE_RULE_DESC
[SQL_EXECUTE_TIME(ms)]:28
[TIME]:2016-09-06 02:00:45
SELECT SYSDATE FROM DUAL
[SQL_EXECUTE_TIME(ms)]:1
现在想将 [TIME] 跟 [SQL_EXECUTE_TIME(ms)] 之间的文本都拼接为一行
我的语句如下 (换行替换为# 为了方便观察替换了多少个换行符)
思路是先将 pattern space(模式空间)都放到 hold space(保留空间)
直到匹配到 SQL_EXECUTE 然后将 复制 hold space 的内容到 pattern space 并将换行符替换,拼接成一行
清空 pattern space,hold space
sed -n 'H;/SQL_EXECUTE/{g;s/\n/#/gp;d;x;d
}
' file
执行结果如下
#[TIME]:2016-09-06 02:00:45#SELECT #balance_rule_id,#rule_type,#rule_desc ## FROM acct_test.BALANCE_TYPE_RULE_DESC##[SQL_EXECUTE_TIME(ms)]:28
#[TIME]:2016-09-06 02:00:45#SELECT #balance_rule_id,#rule_type,#rule_desc ## FROM acct_test.BALANCE_TYPE_RULE_DESC##[SQL_EXECUTE_TIME(ms)]:28##[TIME]:2016-09-06 02:00:45# SELECT SYSDATE FROM DUAL ##[SQL_EXECUTE_TIME(ms)]:1
看现象好像似乎没有清空掉 hold space的内存。
求高人指点。
|
|