【问题标题】:Cat last X characters on the 14th line in a fileCat 文件第 14 行的最后 X 个字符
【发布时间】:2020-03-25 13:27:34
【问题描述】:

我有一个文件,其中一行包含VERSION : X.X.X

我想在控制台上返回该行的 X.X.X 部分。 首先,我需要得到我正在使用的线路

sed -n 14p filename.txt

对于如何只返回该行的最后 5 个字符而不是整行,我有点迷茫。

【问题讨论】:

  • 为什么不获取第 3 列? awk '{print $3}' 很好奇为什么sed 是首选。

标签: linux sed cat


【解决方案1】:

请您尝试关注一下。

awk '/VERSION/{print substr($0,length($0)-4)}' Input_file

简要说明: 查找具有字符串VERSION 的行,然后使用subtr 打印子字符串,从长度为4 到行的最后一个字符。

关于 OP 的问题,为什么我们必须写代码 length($0)-4 而不是 length($0)-5 让我们通过以下方式理解它:

VERSION : X    .   X   .   X
          ^    ^   ^   ^   ^
          |    |   |   |   |
          -4  -3  -2   -1  Last character/letter of this line(so this becomes 1 character out of 5.
That's why we need to mention -4 in length($0)-4 so that it takes value till last character).

【讨论】:

  • @Shox2711,不,它将是-4,只看到输出将是X.X.X,如下所示,它工作正常。
  • @Shox2711,我在substr的解决方案中也添加了解释。
【解决方案2】:

我的第一个想法:

  1. 换行
  2. 剪切最后/前 X 个字符
  3. 反转线。

rev | cut -c-5 | rev

但是用sed你可以替换:

sed 's/.*\(.\{5\}\)$/\1/'

【讨论】:

    【解决方案3】:

    你可以使用

    sed -n '14 s/VERSION *: *//p' file
    

    online sed demo

    使用s/VERSION *: *//,您只需删除VERSION,0 个或多个空格,:,0 个或多个空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-20
      相关资源
      最近更新 更多