【问题标题】:Obtain substring using awk使用 awk 获取子字符串
【发布时间】:2013-09-30 06:55:16
【问题描述】:

所有,我想使用 AWK 将下面的字符串拆分为第一部分。

AWK表达式怎么写?

#!/bin/bash

function parsePackageName()
{
  #....... here I want to get the String "pp-demo-mid"
  #        from "pp-demo-mid-1.0-212.noarch"
}

示例输入:

pp-demo-mid-1.0-212.noarch
pp-1.0-212.noarch
pp-xx-1.0-212.noarch

期望的输出:

pp-demo-mid
pp
pp-xx

也就是说,我需要在版本号之前解析第一部分。

【问题讨论】:

  • 正则表达式的格式非常不清楚。考虑提供更多示例
  • 要求:1. echo XXX-1.6.6-5.i386 | awk -F- '{ print $1}' --> XXX 。 2 回声 XXX-UU-M-1.4.3-2.noarch.rpm | awk -F- '{ print $1}' --> XXX,但我想得到 XXX-UU-M
  • 请更新此问题。这是否意味着版本号之前的任何名称?
  • 不用 awk 实现功能即可
  • 看起来 SO 遥遥领先 - 它已经用红色突出显示了你不想要的东西 :)

标签: regex linux bash shell awk


【解决方案1】:

这样的?它在第一个 -number 处划分字符串。

awk -F"-[0-9]" '{print $1}' file
pp-demo-mid
pp
pp-xx

或者你可以更具体,在第一个 -x.x 之后进行划分,其中 x 是一个数字

awk -F"-[0-9][.][0-9]" '{print $1}' file

【讨论】:

    【解决方案2】:

    这是使用sed的尝试

    sed -r 's/([^0-9]+)-.*/\1/'
    

    ([^0-9]+) 将捕获\1 中的所有非数字字符

    【讨论】:

      猜你喜欢
      • 2014-10-20
      • 2013-04-09
      • 2015-05-10
      • 2013-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多