我想从文件中匹配模式后提取一些内容。
$ 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
我需要逐行处理输入文件。对于每一行,需要检查以下内容。
如果该行以setenv
字开头,那么它应省略前两个字并打印/输出该行中的剩余内容。
如果该行以namedalloc
开头,则应替换为uboot_namedalloc
字。
我想在输出中只有以下行。
heap=0x100000 node_type=IB
uboot_namedalloc GWUP_FEATURE_MEMORY_BLOCK 0x480000000 0x16093A000
namedprint
heap=0x256000 node_type=AB
答案 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
不那么优雅,但它确实有效。