在linux中进行模式匹配后提取内容

时间:2013-08-06 09:24:45

标签: linux bash shell awk

我想从文件中匹配模式后提取一些内容。

$ cat test
setenv se_boot_opt heap=0x100000 node_type=IB
namedalloc GWUP_FEATURE_MEMORY_BLOCK 0x480000000 0x16093A000
namedprint
setenv se_boot_opt2 heap=0x256000 node_type=AB

我需要逐行处理输入文件。对于每一行,需要检查以下内容。

  1. 如果该行以setenv字开头,那么它应省略前两个字并打印/输出该行中的剩余内容。

  2. 如果该行以namedalloc开头,则应替换为uboot_namedalloc字。

  3. 我想在输出中只有以下行。

    heap=0x100000 node_type=IB
    uboot_namedalloc GWUP_FEATURE_MEMORY_BLOCK 0x480000000 0x16093A000
    namedprint
    heap=0x256000 node_type=AB
    

4 个答案:

答案 0 :(得分:1)

尝试grep:

grep -o 'heap=.*'

〔实施例

kent$  echo "setenv se_boot_opt1 heap=0x100000 node_type=IB
namedprint
setenv se_boot_opt2 heap=0x256000 node_type=AB"|grep -o 'heap=.*'
heap=0x100000 node_type=IB
heap=0x256000 node_type=AB

答案 1 :(得分:1)

grep -o 'heap=[^ ]* node_type=[^ ]*' test
heap=0x100000 node_type=IB
heap=0x256000 node_type=AB

答案 2 :(得分:0)

这个awk脚本可以解决这个问题:

$ awk '$1=="setenv"{$1=$2="";sub(/ */,"")}$1=="namedalloc"{$1="uboot_"$1}1' file
heap=0x100000 node_type=IB
uboot_namedalloc GWUP_FEATURE_MEMORY_BLOCK 0x480000000 0x16093A000
namedprint
heap=0x256000 node_type=AB

答案 3 :(得分:0)

perl方法。

echo 'setenv se_boot_opt heap=0x100000 node_type=IB
namedalloc GWUP_FEATURE_MEMORY_BLOCK 0x480000000 0x16093A000
namedprint
setenv se_boot_opt2 heap=0x256000 node_type=AB' | perl -lape 'if (/^setenv/){s/(\w+\s){2}//}elsif(/^namedalloc/){s/namedalloc/uboot_namedalloc/}'

输出:

heap=0x100000 node_type=IB
uboot_namedalloc GWUP_FEATURE_MEMORY_BLOCK 0x480000000 0x16093A000
namedprint
heap=0x256000 node_type=AB

不那么优雅,但它确实有效。