繁体   English   中英

sed逆序标签读取

[英]sed reverse order label reading

我想使用sed解析文件,并仅在字段中打印最后的i标签。 每个标签用分隔.

如果我选择i=3 ,并且文件包含以下几行:

begin_text|label_n.label_n-1.other_labels.label3.label2.label1|end_text
BEGIN_TEXT|LABEL3.LABEL2.LABEL1|END_TEXT
Begin_Text|Label2.Label1|End_Text

我想,如果至少有3个标签,则输出行应为:

begin_text|label_n.label_n-1.other_labels.label3.label2.label1|end_text
BEGIN_TEXT|LABEL3.LABEL2.LABEL1|END_TEXT

目前 :

sed 's;\(^[^|]\+\)|.*\.\([^\.]\+\.[^\.]\+\.[^\.]\+\)|\([^|]\+$\);\1|\2|\3;' test.txt

生产:

begin_text|label3.label2.label1|end_text
BEGIN_TEXT|LABEL3.LABEL2.LABEL1|END_TEXT
Begin_Text|Label2.Label1|End_Text

并且我不知道为什么第3行会发生匹配。我还认为这是进行逆序标签读取的更好方法。

任何意见/建议表示赞赏。

使用awk将使工作更加轻松。

awk 'split($2,a,".")>=i' FS="|" i=3 file

begin_text|label_n.label_n-1.other_labels.label3.label2.label1|end_text
BEGIN_TEXT|LABEL3.LABEL2.LABEL1|END_TEXT

说明

split(string, array, fieldsep)
split returns the number of elements created. 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM