免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4012 | 回复: 20
打印 上一主题 下一主题

[文本处理] 将一对标志符之间的多行合并成一行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-18 19:55 |只看该作者 |倒序浏览
本帖最后由 yelang5460 于 2015-05-18 19:55 编辑

想将下面的文本中<>之间的部分的多行数据格式化成这样的一行行数据,以方便后期查找替换...
<favorite launcher:packageName="com.android.browser" launcher:className="com.android.browser.BrowserActivity" launcher:screen="3" />

<favorite之前可能有多个空格或者tab ,<favorite然后后面还可能有回车 空格或者换行









<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2009 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

         

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<favorites xmlns:launcher="//schemas.android.com/apk/res/com.sec.android.app.launcher">
    <home>
     
       
        <!-- Left screen [1] -->        
       
        <appwidget
        launcher:packageName="com.sec.android.widgetapp.digitalclock"
        launcher:className="com.sec.android.widgetapp.digitalclock.DigitalClockWidgetProvider"
        launcher:screen="1"
        launcher:x="0"
        launcher:y="0"
        launcher:spanX="4"
        launcher:spanY="1" />      
        
            <search
        launcher:screen="1"
        launcher:x="0"
        launcher:y="2" />
                        
        <favorite
        launcher:packageName="com.android.email"
        launcher:className="com.android.email.activity.Welcome"
        launcher:screen="1"
        launcher:x="0"
        launcher:y="3" />
                        
        <favorite
        launcher:packageName="com.sec.android.app.camera"
        launcher:className="com.sec.android.app.camera.Camera"       
        launcher:screen="1"
        launcher:x="1"
        launcher:y="3" />
  
        <favorite
        launcher:packageName="com.sec.android.app.samsungapps"
        launcher:className="com.sec.android.app.samsungapps.Main"
        launcher:screen="1"
        launcher:x="2"
        launcher:y="3" />


        <favorite
        launcher:packageName="com.sec.chaton"
        launcher:className="com.sec.chaton.HomeActivity"
        launcher:screen="1"
        launcher:x="3"
        launcher:y="3" />
                     
       
    </home>
    <!-- Hotseat (We use the screen as the position of the item in the hotseat) -->
    <hotseat>
        <favorite
            launcher:packageName="com.android.contacts"
            launcher:className="com.android.contacts.activities.DialtactsActivity"
            launcher:screen="0" />
        <favorite
            launcher:packageName="com.android.contacts"
            launcher:className="com.android.contacts.activities.PeopleActivity"
            launcher:screen="1" />
        <favorite
            launcher:packageName="com.android.mms"
            launcher:className="com.android.mms.ui.ConversationComposer"
            launcher:screen="2" />
        <favorite
            launcher:packageName="com.android.browser"
            launcher:className="com.android.browser.BrowserActivity"
            launcher:screen="3" />
     </hotseat>
</favorites>

论坛徽章:
9
射手座
日期:2014-07-29 13:05:07双子座
日期:2015-01-11 17:01:522015年亚洲杯之朝鲜
日期:2015-02-01 16:14:282015亚冠之阿尔艾因
日期:2015-06-04 17:54:40数据库技术版块每日发帖之星
日期:2015-08-02 06:20:00数据库技术版块每日发帖之星
日期:2015-10-28 06:20:00数据库技术版块每日发帖之星
日期:2015-11-26 06:20:0015-16赛季CBA联赛之天津
日期:2016-06-20 17:09:2015-16赛季CBA联赛之青岛
日期:2017-02-26 15:54:19
2 [报告]
发表于 2015-05-18 20:28 |只看该作者
  1. sed '/<[^>]\+$/{:a;N;/>/!ba;s/\n//g}'
复制代码

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-07-04 22:20:00IT运维版块每日发帖之星
日期:2015-11-25 06:20:00
3 [报告]
发表于 2015-05-18 20:32 |只看该作者
BEGIN {FS="\n" RS="" ORS=""} 类似这样的分割方法,将每一段看作一个记录,而将每一段中的每一条字符串看作一个字段

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-07-04 22:20:00IT运维版块每日发帖之星
日期:2015-11-25 06:20:00
4 [报告]
发表于 2015-05-18 20:59 |只看该作者
可否详细解释一下,尤其{}内的语法回复 2# stupid_lee


   

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
5 [报告]
发表于 2015-05-18 22:21 |只看该作者
回复 1# yelang5460
  1. sed -nr '/<[^>]+$/{h;:a;n;H;/>/!ba;g;s/(\n)+ */ /gp;d};/^ *$/!p' file
复制代码
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- Copyright (C) 2009 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at  Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -->
  3. <favorites xmlns:launcher="//schemas.android.com/apk/res/com.sec.android.app.launcher">
  4.     <home>
  5.         <!-- Left screen [1] -->
  6.         <appwidget launcher:packageName="com.sec.android.widgetapp.digitalclock" launcher:className="com.sec.android.widgetapp.digitalclock.DigitalClockWidgetProvider" launcher:screen="1" launcher:x="0" launcher:y="0" launcher:spanX="4" launcher:spanY="1" />
  7.             <search launcher:screen="1" launcher:x="0" launcher:y="2" />
  8.         <favorite launcher:packageName="com.android.email" launcher:className="com.android.email.activity.Welcome" launcher:screen="1" launcher:x="0" launcher:y="3" />
  9.         <favorite launcher:packageName="com.sec.android.app.camera" launcher:className="com.sec.android.app.camera.Camera"         launcher:screen="1" launcher:x="1" launcher:y="3" />
  10.         <favorite launcher:packageName="com.sec.android.app.samsungapps" launcher:className="com.sec.android.app.samsungapps.Main" launcher:screen="1" launcher:x="2" launcher:y="3" />
  11.         <favorite launcher:packageName="com.sec.chaton" launcher:className="com.sec.chaton.HomeActivity" launcher:screen="1" launcher:x="3" launcher:y="3" />
  12.     </home>
  13.     <!-- Hotseat (We use the screen as the position of the item in the hotseat) -->
  14.     <hotseat>
  15.         <favorite launcher:packageName="com.android.contacts" launcher:className="com.android.contacts.activities.DialtactsActivity" launcher:screen="0" />
  16.         <favorite launcher:packageName="com.android.contacts" launcher:className="com.android.contacts.activities.PeopleActivity" launcher:screen="1" />
  17.         <favorite launcher:packageName="com.android.mms" launcher:className="com.android.mms.ui.ConversationComposer" launcher:screen="2" />
  18.         <favorite launcher:packageName="com.android.browser" launcher:className="com.android.browser.BrowserActivity" launcher:screen="3" />
  19.      </hotseat>
  20. </favorites>
复制代码

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
6 [报告]
发表于 2015-05-18 22:38 |只看该作者
本帖最后由 songyc_2015 于 2015-05-18 23:31 编辑

回复 1# yelang5460
  1. awk '/</{p=1}/>/{p=0;s=length(s)?s"# "$0:$0;gsub(/# +/," ",s);print s;s=""}p{s=length(s)?s"# "$0:$0}' file
  2. awk '/</,/>/{s=length(s)?s"# "$0:$0;if($0~/>/){gsub(/# +/," ",s);print s;s=""}}' file
复制代码

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
7 [报告]
发表于 2015-05-19 00:12 |只看该作者
  1. awk '/<.*>/{print $0}/<[^>]+$/{p=1;t=$0;next}p&&!/^$/{t=t" "gensub(/^[ ]+/,"","G",$0)}/\/>|^ -->/{print t;t=""}' file
复制代码
回复 1# yelang5460


   

论坛徽章:
0
8 [报告]
发表于 2015-05-19 09:57 |只看该作者
感谢楼上各位大神

sed的语法还是比较好理解的

awk简直没法说,看了几篇基础文章,来理解这个简直一头雾水.....

论坛里的对于awk的高级用法的讲解 貌似相关文章不多啊 哪位大神翻译一点造福一下大家么......

论坛徽章:
0
9 [报告]
发表于 2015-05-19 10:16 |只看该作者
回复 2# stupid_lee

感谢,这行代码基本实现了我的要求

只是结果没有替换多个空格为一个空格  然后各行之间会有一个空行

sed完全可以做到,强....

论坛徽章:
0
10 [报告]
发表于 2015-05-19 10:19 |只看该作者
回复 5# songyc_2015



只是我这边跑出来的结果出现一个问题

有些行之间出现了一行到两行的空行

可能是回车符没替换掉


这行sed代码还是很赞的  .....
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP