shell脚本来提取函数名的一些使用
提取函数名
使用awk
#!/bin/bash
filename=mian.c
cat $filename | while read line
do
echo $line | grep '(' | awk -F'(' '{print $1}' | awk -F' ' '{print $NF}'
done
说明:
echo $line : 打印整行语句
grep ‘(’ : 查到有“(”的语句
awk -F ’ ( ’ ‘{print $1}’ : 已’(’ 为分割符,并获取第一段
awk -F’ ’ ‘{print $NF}’ :已空格为分给符,获取第NF段(NF时分割的总段数,这里的意思就是获取最后一段)
while循环
while循环读取文件中内容有两种写法,一种是管道符,一种是重定向,写法如下
管道符:
cat $file_name | while read line
do
#deal with line
done
重定向
while read line
do
#deal with line
done < $file_name
inux执行shell时,会创建“子shell”运行shell中的命令,当运行到非内建指令时,会创建“孙shell”运行非内建指令
变量的作用于在每个shell中有效,所以,非内建指令中定义的这些变量就只能在孙shell运行,而在子shell中不生效,所以,即便我在while中给path_all赋值了,子shell中也不会获取到这个值。解决这个问题的办法有两种,如下
如果不是必须使用管道符的方式写while循环,可以用重定向的写法,这种写法循环内的变量在子shell中是生效的,比较简便
如果非要使用管道符的方式,可以创建临时文件,用于存放shell中的输出
sed使用
使用sed进行匹配到关键词后进行替换
1:替换时进行全词匹配
sed -i "s/\b$line\b/$rename_func/g" $1
在词的前后\b
2:在替换时排除一些含有关键词的行
sed -i "/#include/b; s/\b$line\b/$rename_func/g" $1
例如排除要排除#include
的行,在前面添加/#include/b