Linux shell sed awk
发布日期:2021-06-30 18:53:38 浏览次数:3 分类:技术文章

本文共 4519 字,大约阅读时间需要 15 分钟。

1、我们的平台编译kernel的时候总是要输入项目名称,很麻烦

################################################## Compile kernel and pack it into boot.img   ###################################################!/bin/shPROJECT=$1echo $PROJECTif [ "$1" = "" ];then    echo "Use: makeMtk.ini file for the mkkernel project_name"#exit  修改 sen -n "1p" makeMtk.ini获取makeMtk.ini的第一行数据#awk '{print $3}'获取第三个参数 #read LINE 把之前传进来的参数读取出来    sed -n "1p" makeMtk.ini|awk '{print $3}'|while read LINE    do    PROJECT=$LINE    ./makeMtk $PROJECT new kernel    ./makeMtk $PROJECT remake kernel    echo ./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img    ./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img    done    #编译完成后退出        exitelse    echo "Use: $1 for the project name"    PROJECT=$1fiecho ./makeMtk $PROJECT new kernel./makeMtk $PROJECT remake kernelecho ./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img

看到代码里面我们每次要编译内核的时候都要输入./mkkernel mid713l_lp_lvds mid713l_lp_lvds 是项目名称,我觉得很麻烦。

2、sed读取文件的某一行

读取文件的某一行可以看看sed 这个命令

sed -n “1p” mkkernel 显示文件的第一行
sed -n “1,4p” mkkernel 显示文件第一行到第四行

weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ sed -n "1p" mkkernel ################################################weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ sed -n "1,4p" mkkernel ################################################## Compile kernel and pack it into boot.img   ###################################################!/bin/shweiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$

3、 awk截取某一列

awk ‘{print $3}’ 把管道前面的第三列显示出来

weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ cat makeMtk.iniproject = mid713l_lp_lvdsbuild_mode = engweiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ cat makeMtk.ini |awk '{print $3}'mid713l_lp_lvdsengweiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$

4、while read LINE ;do done 读取文件

do done会重新起一个子shell 这是为什么我不能把$LINE传下去的原因

sed -n "1p" makeMtk.ini|awk '{print $3}'|while read LINEdoPROJECT=$LINE./makeMtk $PROJECT new kernel./makeMtk $PROJECT remake kernelecho ./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.imgdone

5、用set -x set +x调试上面的说法

################################################## Compile kernel and pack it into boot.img   ###################################################!/bin/shset -xif [ "$1" = "" ];then        echo "Use: makeMtk.ini file for the mkkernel project_name"#exit  修改 sen -n "1p" makeMtk.ini获取makeMtk.ini的第一行数据#awk '{print $3}'获取第三个参数 #read LINE 把之前传进来的参数读取出来        sed -n "1p" makeMtk.ini|awk '{print $3}'|while read LINE        do        PROJECT=$LINE        echo $PROJECT        break        done        echo $PROJECT        #编译完成后退出         #exitelse        echo "Use: $1 for the project name"        PROJECT=$1fiecho ./makeMtk $PROJECT new kernelset +x#./makeMtk $PROJECT remake kernel#echo ./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img#./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img

输出结果如下

weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ ./wmkkernel ++ '[' '' = '' ']'++ echo 'Use: makeMtk.ini file for the mkkernel project_name'Use: makeMtk.ini file for the mkkernel project_name++ sed -n 1p makeMtk.ini++ read LINE++ awk '{print $3}'++ PROJECT=mid713l_lp_lvds++ echo mid713l_lp_lvdsmid713l_lp_lvds++ break++ echo++ echo ./makeMtk new kernel./makeMtk new kernel++ set +xweiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ vim wmkkernel

所以最终我的修改方案是第一种,网上查的办法行不通。

转载地址:https://linus.blog.csdn.net/article/details/49886953 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:使用gdb
下一篇:strace调试(Linux Device Driver)

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年05月04日 01时24分03秒