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

################################################
## Compile kernel and pack it into boot.img   ##
################################################
#!/bin/sh

PROJECT=$1
echo $PROJECT
if [ "$1" = "" ];thenecho "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 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#编译完成后退出    exit
elseecho "Use: $1 for the project name"PROJECT=$1
fi
echo ./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

看到代码里面我们每次要编译内核的时候都要输入./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/sh
weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ 

3、 awk截取某一列

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

weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ cat makeMtk.ini
project = mid713l_lp_lvds
build_mode = eng
weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ cat makeMtk.ini |awk '{print $3}'
mid713l_lp_lvds
eng
weiqifa@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 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   

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

################################################
## Compile kernel and pack it into boot.img   ##
################################################
#!/bin/sh
set -x
if [ "$1" = "" ];thenecho "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 LINEdoPROJECT=$LINEecho $PROJECTbreakdoneecho $PROJECT#编译完成后退出 #exit
elseecho "Use: $1 for the project name"PROJECT=$1
fi
echo ./makeMtk $PROJECT new kernel
set +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_lvds
mid713l_lp_lvds
++ break
++ echo++ echo ./makeMtk new kernel
./makeMtk new kernel
++ set +x
weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ vim wmkkernel 

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

Linux shell sed awk相关推荐

  1. linux shell sed awk 命令(2)-awk

    linux shell sed awk 命令(2)-awk awk语法格式: awk [选项] -f program-file [ -- ] file ... 选项: -F fs, --field-s ...

  2. linux grep sed awk

    linux 文本编辑命令grep sed awk(转)     grep grep (global search regular expression(RE) and print out the li ...

  3. linux shell之awk

    1 awk awk 是一款设计用于数据流的工具, awk有很多内建的功能,比如数组.函数等,这是它和C语言的相同之处 awk 脚本的结构基本如下所示: awk ' BEGIN{print " ...

  4. linux shell sed i,Linux Shell学习-sed命令详解

    (1).sed介绍 Sed是流编辑器,stream editor,它是一个将一些列编辑命令作用于一批文本文件的理想工具. (2).sed工作原理 Sed是一个非交互式文本编辑器,它可以对文本文件和标准 ...

  5. 【Linux】 sed AWK

    文章目录 sed AWK 与 Vim的区别 sed sed的替换命令 sed 替换加强版 全局替换 标志位 寻址替换 分组 脚本文件 其他命令 删除 追加插入 和更改 rw 文件 行号 打印 p p ...

  6. Linux Shell 命令--awk

    说明: awk被设计用于数据流,能够对列和行进行操作.而sed更多的是匹配,进行替换和删除. awk有很多内建的功能,比如数组,函数等.灵活性是awk的最大优势.  awk的结构 awk ' BEGI ...

  7. shell ,sed,awk 基本用法汇总

    2019独角兽企业重金招聘Python工程师标准>>> 1    shell 它是一门解释型语言,一般叫做脚本或shell脚本 1.1    分类 ksh         tcsh ...

  8. linux shell sed 单引号, 双引号,反引号, 斜杆, 反斜杆(‘ “ ` / \)

    前言: 来看这个内容的,估计和我一样被绕晕了, 找不到规则.其实这是shell比较灵活导致的. 其实遵循如下原则可以避免莫名其妙的意外(少掉头发). 1) 坚决不使用反引号(`),  坚决使用$() ...

  9. linux shell 指令 awk 是什么意思

    参考资料: linux awk命令详解 - ggjucheng - 博客园 这是一个强大的文本分析工具. 力扣

最新文章

  1. [2014百度之星资格赛]
  2. 5折交叉验证_[Machine Learning] 模型评估——交叉验证/K折交叉验证
  3. android api接口封装,生成App接口
  4. 《Linux高性能服务器编程》学习笔记
  5. git-svn — 让git和svn协同工作
  6. redis php怎么使用教程,PHP 使用redis
  7. linux mysql root用户密码_Linux下修改Mysql的用户(root)的密码
  8. jQuery+toggle
  9. bootstrap方法_中介效应中的bootstrap方法
  10. Android开发笔记(十七)GIF动画的实现GifAnimation
  11. Windows 制作免安装的JAVA环境
  12. 设计图标(logo)
  13. SQL Server2005 只有配置工具,而没有查询分析器、企业管理器的解决方法
  14. 全球各个国家名的英文
  15. C++初学者遇到的LNK1120无法解析的外部命令部分可能原因
  16. django1.8下的markdown、highlight、pagedown解决
  17. jvm 调优 java 虚拟机 马士兵 马士兵 马士兵 笔记
  18. Fama-French 三因子模型介绍、修改与框架搭建
  19. 昕诺飞针对青少年视力健康发布瞳乐光技术系列台灯
  20. 坑一:canal 的一处TODO 引发的一地华子

热门文章

  1. mysql my.cnf 配置建议
  2. MongoDB(4)--MongoDB服务的启动
  3. JVM对象占用内存计算
  4. web服务器文件管理,web文件管理服务器
  5. qt release打包发布_几种解决Qt程序打包后无法连接数据库问题的方法
  6. oracle 未找到段的存储定义,Exp-00003 no storage definition found issue in oracle 11g (未找到段 (0,0) 的存储定义)...
  7. modbus从站模拟软件_作为工控电气人,你知道我们必备的软件有哪些吗?
  8. JavaScript中的正则
  9. 21.判断栈弹出顺序是否正确
  10. jpush 极光推送 java