通过检查多个条件来提取字符串的一部分 - Shell脚本

时间:2014-06-06 10:21:17

标签: linux unix grep

我第一次尝试任何shell脚本时,我需要执行的任务如下:

此命令的输出在下面 - > cat /sys/kernel/debug/spmi/spmi-0/data

00800 00 03 03 00 01 01 00 C0 10 00 00 00 00 20 00 00
00810 00 03 03 03 00 03 03 00 00 00 00 00 00 00 00 00
00820 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00830 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00840 0F 07 01 00 0F 07 04 00 0F 07 07 80 0F 07 04 00
00850 0F 07 04 00 0F 03 08 00 00 00 01 80 00 00 00 00
00860 00 00 00 80 00 00 04 80 00 00 04 00 00 00 00 00
00870 0F 00 00 00 02 04 00 00 00 00 00 00 00 00 00 00
00880 FE 00 40 00 00 00 00 00 05 00 20 00 01 00 00 00

我需要检查first row and 14th column value and extract it.的值,该值可以是00 or 20。在这个价值的基础上,我必须改变我认为我可以照顾的目录名称。

任何人都可以帮我解决这个问题,因为我已经从https://unix.stackexchange.com/questions/37313/how-do-i-grep-for-multiple-patterns用Google搜索但是无法做到。

2 个答案:

答案 0 :(得分:0)

这很容易!

$ head /sys/kernel/debug/spmi/spmi-0/data -n 1| cut -d " " -f 14

说明:

  1. head /sys/kernel/debug/spmi/spmi-0/data -n 1它将从给定文件中输出第一行。

  2. cut -d " " -f 14将选择第14个字段/列(其中字段由" " -Space

  3. 分隔

    修改

    用法

    value=`head /sys/kernel/debug/spmi/spmi-0/data -n 1| cut -d " " -f 14`
    echo $value
    

    awk - 解决方案

    twalberg

    提供的替代解决方案
    awk 'NR==1{print $14}' /sys/kernel/debug/spmi/spmi-0/data
    

答案 1 :(得分:-1)

根据我的理解,创建一个您需要搜索的模式,就像您的情况一样,它是00或20。 图案=" 00 | 20"

cat / sys / kernel / debug / spmi / spmi-0 / data | grep -E“$ {pattern}”

然后你可以使用 cut -d" " -f2 获取特定列 这将根据您的模式给出输出,希望我理解您的问题是正确的。