1、echo输出有色及指定大小字符串
echo -e "\e[0;31;1m要输出的字符串\e[0m"
echo 加上-e参数使得 \ 具有了C中的printf输出一样的转义功能
\e[0;31;1m为设置输出字符为红色31(无背景色),1m粗体
更多控制功能如下:
编码 颜色/动作
0 重新设置属性到缺省设置
1 设置粗体
2 设置一半亮度(模拟彩色显示器的颜色)
4 设置下划线(模拟彩色显示器的颜色)
5 设置闪烁
7 设置反向图象
22 设置一般密度
24 关闭下划线
25 关闭闪烁
27 关闭反向图象
30 设置黑色前景
31 设置红色前景
32 设置绿色前景
33 设置棕色前景
34 设置蓝色前景
35 设置紫色前景
36 设置青色前景
37 设置白色前景
38 在缺省的前景颜色上设置下划线
39 在缺省的前景颜色上关闭下划线
40 设置黑色背景
41 设置红色背景
42 设置绿色背景
43 设置棕色背景
44 设置蓝色背景
45 设置紫色背景
46 设置青色背景
47 设置白色背景
49 设置缺省黑色背景
其他有趣的代码还有:
\033[2J 清除屏幕
\033[0q 关闭所有的键盘指示灯
\033[1q 设置“滚动锁定”指示灯 (Scroll Lock)
\033[2q 设置“数值锁定”指示灯 (Num Lock)
\033[3q 设置“大写锁定”指示灯 (Caps Lock)
\033[15:40H 把关闭移动到第15行,40列
\007 发蜂鸣生beep
2、字符串判断
if (echo "this is string test!" | grep -q '^[a-zA-Z0-9]\+$'); then
echo "字符串输入合法"
else
echo "字符串输入不合法"
fi
上面脚本将输出“字符串输入不合法”,因为所加的条件判断是用来检测字符串是不是只由a-z或A-Z或0-9这些字符组成,而上面的字串里有空格符
if (echo "12my_project" | grep -q '^[a-zA-Z]');
then
echo "工程名输入合法"
else
echo "工程名输入不合法"
fi
上面脚本将输出“工程名输入不合法”,因为所加的条件判断是用来检测字符串是否以字母开头的
关于管道操作符号 | 更多
http://blog.csdn.net/cnctloveyu/article/details/4131770
关于更多grep
http://blog.csdn.net/deansrk/article/details/6628630
关于正值表达式
http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F
3、在指定文件中查找指定内容并插入字符(模板)
(echo "/panther_config/i"; echo-e "${NEW_PROJECT_NAME}_config : unconfig\n @./mkconfig \$(@:_config=) arm omap3 ${NEW_PROJECT_NAME}\n"; echo '.'; echo 'wq') |ed Makefile
上面这句脚本的作用是在Makefile这个文件里查找panther_config字串并将模板
${NEW_PROJECT_NAME}_config : unconfig\n @./mkconfig \$(@:_config=) arm omap3 ${NEW_PROJECT_NAME}\n
插入到查找到的字串前面,这个是我用来自动给xloader 的 Makefile增加工程用的,如下我所添加的工程名为NEW_PROJECT_NAME = zt6810,那么由上面的脚本将在Makefile里生成如下内容
zt6810_config : unconfig
@./mkconfig $(@:_config=) arm omap3 zt6810
这里用到了ed命令,更多用法
http://biancheng.dnbcw.info/shell/242647.html
4、批量替换及大小写转换
sed -i "s/ZT6810/`echo $NEW_PROJECT_NAME | tr [a-z][A-Z]`/g" include/configs/$NEW_PROJECT_NAME.h
上面脚本要注意红色所标部分 ` 是 table键上面的那个反单引号
上面命令可拆分成两部分
a、字母大小写转换
echo $NEW_PROJECT_NAME | tr [a-z] [A-Z]
这句是将变量NEW_PROJECT_NAME中所有的小写字母转换成大写,注意[a-z]与[A-Z]之间的空格符
b、sed -i .....
将a中得到的已经转换成大写的字串替换掉ZT6810字串
在一个文件的第几行后插入新行
linux perl shell perl vi grep awk xargs 批量替换
Linux下批量替换多个文件中的字符串的简单方法。用sed命令可以批量替换多个文件中的字符串。
用sed命令可以批量替换多个文件中的 字符串。
sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录`
例如:我要把mahuinan替换 为huinanma,执行命令:
sed -i "s/mahuinan/huinanma/g" 'grep mahuinan -rl /www'
这是目前linux最简单的批量替换字符串命令了!
具体格式如下:
sed -i "s/oldString/newString/g" `grep oldString -rl /path`
实例代码:sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl /usr/aa`
sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl ./`
方法3:
在日程的开发过程中,可能大家会遇到将某个变量名修改 为另一个变量名的情况,如果这个变量是一个局部变量的话,vi足以胜任,但是如果是某个全局变量的话,并且在很多文件中进行了使用,这个时候使用vi就是 一个不明智的选择。这里给出一个简单的shell命令,可以一次性将所有文件中的指定字符串进行修改:
grep "abc" * -R | awk -F: '{print $1}' | sort | uniq | xargs sed -i 's/abc/abcde/g'
from: http://blog.zol.com.cn/1395/article_1394052.html
补充说明:
sed -i "s/oldString/newString/g" `grep oldString -rl /path`
对多个文件的处理可能不支持,需要用 xargs, 搞定。
变种如下:
grep oldString -rl /path | xargs sed -i "s/oldString/newString/g"
注意:
在 `grep oldString -rl /path` 中 ` 为1前边的翻引号`,而不是enter 前的 '