在变量中,值可以像这样:
ab_5.6.533.162665_84.kn or ab_5.6.550_prod342.6.165834_84.kn
值162665可以更改。模式将保持不变:ab_5.6.533.162665_84.kn或ab_5.6.550_prod342.6.165834_84.kn ..在任何情况下,我都只希望最后一个倒数第三个值..例如在这种情况下162665。因此,问题在于获取ab_5.6.533./ab_5.6.550_prod342.6之间的值。和_84.kn,即162665
我一直想抓住(倒数第三)“ 165834”这个值。任何帮助将不胜感激
简而言之,我需要一个在两种情况下都可以使用的命令。
我使用过cut,但是它只适用于一种情况,不适用于其他情况
root:~# cat abc.log | cut -d '.' -f 4
162665_84
6
root:~#
cat abc.log
ab_5.6.533.162665_84.kn
ab_5.6.550_prod342.6.165834_84.kn
答案 0 :(得分:0)
给出:
$ echo "$s"
ab_5.6.533.162665_84.kn
ab_5.6.550_prod342.6.165834_84.kn
如果感兴趣的字段是倒数第二个,则可以执行以下操作:
$ echo "$s" | awk -F "[._]" '{print $(NF-2)}'
162665
165834
或者,如果该字段是sed
,则可以使用.[0-9]+_
:
$ echo "$s" | sed -nE 's/.*[.]([0-9][0-9]*)_.*$/\1/p'
162665
165834
或者您可以使用rev
,以便可以使用cut
来对字段进行倒计数:
$ echo "$s" | rev | cut -d _ -f 2 | cut -d . -f 1 | rev
162665
165834
但是我不得不承认你所追求的还不是很清楚。