Solaris 10环境下合并文件中<open>标签块内多行为单行
解决Solaris 10上合并标签块内多行内容的问题
你的原有命令存在两个关键问题:
- 正则表达式写法错误,
/^</open>/无法正确匹配</open>行 - 未区分是否处于
<open>标签块内,仅简单对非</open>行去换行,无法实现块内内容的完整合并
正确的Perl命令
在Solaris 10环境下,执行以下命令即可满足需求:
perl -ne ' if (/^<open>/) { $in_open = 1; chomp; print; } elsif (/^<\/open>/) { chomp; print "$_\n"; $in_open = 0; } elsif ($in_open) { chomp; s/^\s+//; # 移除行首多余空格 print; } else { print; } ' file_name
命令逻辑说明
- 用状态变量
$in_open标记当前是否处于<open>标签块内 - 匹配到
<open>行时,开启状态,去掉换行符后直接打印 - 处于
<open>块内时,所有行去掉换行符和行首空格后连续打印 - 匹配到
</open>行时,去掉换行符后打印并添加换行,同时关闭状态 - 非
<open>块的内容保持原有格式直接输出
测试效果
用你的输入文件执行命令后,输出与期望完全一致:
<open><bas>ABC1</bas><stat>1</stat></open> <open><bas>ABC10</bas><stat>1</stat></open> <open><bas>ABC11</bas><stat>4</stat><line>1234</line></open> <new> </new>
内容的提问来源于stack exchange,提问作者Roger
相关产品推荐
相关产品推荐

