【问题标题】:shell/bash: use sed/awk to get string between special charactersshell/bash:使用 sed/awk 获取特殊字符之间的字符串
【发布时间】:2016-04-14 16:05:38
【问题描述】:

假设我有一个字符串

Al99.NegFRho.ZeroRhoR.ZeroPhiR.eam.alloy

我想在 2 个点之间得到 3 个字符串

NegFRho
ZeroRhoR
ZeroPhiR

我怎样才能用 sed 或 awk 做到这一点?

【问题讨论】:

  • echo Al99.NegFRho.ZeroRhoR.ZeroPhiR.eam.alloy | cut -d. --output-delimiter=' ' -f2-4

标签: regex bash shell awk sed


【解决方案1】:

你可以使用awk:

str='Al99.NegFRho.ZeroRhoR.ZeroPhiR.eam.alloy'
awk -F. -v OFS='\n' '{print $2, $3, $4}' <<< "$str"

NegFRho
ZeroRhoR
ZeroPhiR

使用RS 的另一个较小的 awk 变体:

awk -v RS=. 'NR>=2 && NR<=4' <<< "$str"

NegFRho
ZeroRhoR
ZeroPhiR

【讨论】:

    【解决方案2】:

    使用 sed,您可以使用

    $ sed 's/^[^.]*\.\([^.]*\)\.\([^.]*\)\.\([^.]*\)\..*/\1\n\2\n\3/' <<<"$str"
    NegFRho
    ZeroRhoR
    ZeroPhiR
    

    或者,GNU grep

    $ grep -oP '\.\K[^.]+'  <<<"$str" | head -3
    NegFRho
    ZeroRhoR
    ZeroPhiR
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 2021-01-14
      • 2016-04-26
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      相关资源
      最近更新 更多