【问题标题】:Linux: How can i extract information from the files's name?Linux:如何从文件名中提取信息?
【发布时间】:2013-10-09 13:28:15
【问题描述】:

我有一些文件(.txt),名称是:

run_freq100ampl0.6offs0.8_1
run_freq100ampl0.4offs1.1_1
run_freq100ampl0.2offs1.0_1
run_freq100ampl0.4offs1.2_1
run_freq100ampl0.2offs1.1_1
run_freq100ampl0.5offs0.8_1
run_freq100ampl0.2offs1.2_1
run_freq100ampl0.4offs0.8_1

我想得到放大器的数量,比如

0.6
0.4
0.2
0.4
0.2
0.5
0.2
0.4

我如何在 Linux 中使用 'find'、'grep' 或 'cat' 来做到这一点?

【问题讨论】:

    标签: linux grep find cat


    【解决方案1】:

    使用grep

    grep -Po '(?<=ampl).*(?=offs)' input
    

    例子:

    $ grep -Po '(?<=ampl).*(?=offs)' <<< "run_freq100ampl0.2offs1.1_1"
    0.2
    

    使用sed

    $ sed 's/.*ampl\(.*\)offs.*/\1/' <<< "run_freq100ampl0.2offs1.1_1"
    0.2
    

    【讨论】:

    • 谢谢!但我想一次显示所有值。我该怎么做?
    • @user2862989 说sed 's/.*ampl\(.*\)offs.*/\1/' filenamegrep -Po '(?&lt;=ampl).*(?=offs)' filename
    • @user2862989 因为您是新来的,如果您的问题已经解决,请不要忘记将答案标记为已接受。您可以单击答案旁边的复选标记将其从空心切换为绿色。如有任何疑问,请参阅Help Center > Asking
    【解决方案2】:

    使用awk

    awk -F"ampl|off" '{print $2}'
    0.6
    0.4
    0.2
    0.4
    0.2
    0.5
    0.2
    0.4
    

    或者使用固定位置

    awk '{print substr($0,16,3)}'
    

    【讨论】:

      【解决方案3】:
      for f in *.txt
      do
        f=${f%offs*}
        f=${f#*ampl}
        echo ${f}
      done
      

      【讨论】:

        猜你喜欢
        • 2015-05-24
        • 2011-09-14
        • 1970-01-01
        • 2015-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-01
        • 1970-01-01
        相关资源
        最近更新 更多