使用sed搜索精确图案并在新行中打印

时间:2014-11-01 19:14:18

标签: regex linux bash sed

我有一个包含

等数据的大文件
cd24511   |cd25512|cd24541|cd11554            0| cd24512      |cd24542|cd24531            0| cd24513      |cd24543        0| cd27531      |cd27531|cd27541            2740| cd27521   |cd27541            2261|

我想用以下方式使用sed格式化它。

cd24511  |cd25512|cd24541|cd11554  0|

cd24512  |cd24542|cd24531          0|

cd24513  |cd24543                  0|

cd27531  |cd27531|cd27541          2740|

cd27521  |cd27541                  2261|

如果我使用sed搜索数字模式,则列出我所有的数字,如下所示

245112551224541115540245122454224531024513245430

2 个答案:

答案 0 :(得分:0)

这是一种方法:

$ sed -r 's/\s+[0-9]+\s*\|/&\n/g' file | column -t 
cd24511  |cd25512|cd24541|cd11554  0|
cd24512  |cd24542|cd24531          0|
cd24513  |cd24543                  0|
cd27531  |cd27531|cd27541          2740|
cd27521  |cd27541                  2261|

不确定你是否真的想要空行,但你可以这样做:

$ sed -r 's/\s+[0-9]+\s*\|/&\n/g' file | column -t | sed 's/$/\n/'      
cd24511  |cd25512|cd24541|cd11554  0|

cd24512  |cd24542|cd24531          0|

cd24513  |cd24543                  0|

cd27531  |cd27531|cd27541          2740|

cd27521  |cd27541                  2261|

说明:

分解第一个sed脚本:

s        # substitution command 

/        # start of regular expression match 

\s+      # one or more whitespace characters
[0-9]+   # one or more digits
\s*      # zero or more whitespace characters
\|       # literal | character 
/        # end of regular expression match, start of replacement

&\n      # & contains the match, add the newline character 

/        # end of replacement, start of flags

g        # global flag

column -t命令处理我们的表格布局,双倍间距用换行符$替换每行\n的结尾。

答案 1 :(得分:0)

这是awk解决方案。

awk '{for (i=1;i<=NF;i++) if ($i~/^[0-9]+\|/) $i=$i"\n"}1' file | column -t
cd24511  |cd25512|cd24541|cd11554  0|
cd24512  |cd24542|cd24531          0|
cd24513  |cd24543                  0|
cd27531  |cd27531|cd27541          2740|
cd27521  |cd27541                  2261|

它测试所有字段,如果它只包含数字并且|添加换行符。