我想使用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行会发生匹配。我也认为这是一种更好的方法来进行逆序标签阅读。
任何意见/建议都表示赞赏。
答案 0 :(得分:2)
使用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.