shell中文件处理及字符串处理

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字串 


sed几个经常用到语句:  

    在一个文件的第几行后插入新行

 

sed -i '第几行i\要插入的内'   文件

 

在一文件中指定的字符后插入内容

  sed 's/指定的字符/&要插入的字符/'  文件

 

替换指定的字符

  sed -i 's/指定的字符/要替换的字符/'  文件

 

在指定字符所在行后插入字符

sed '/指定字符/a\要插入的字'  文件




linux perl shell perl  vi grep awk xargs  批量替换

方法1:
 
这两天在构建一个应用的使用用到了maven,由于project很大,足足有700多个 pom.xml文件,更郁闷的是在很多pom.xml文件里都单独指定了资源库的url,我需要把这些资源库的url统一指定到nexus本地中央库.
手 工一个个改文件配置有点不太实际,所以google了一下,找到批量替换文件内容的好方法,命令结构如下:
find -name '要查找的文件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g'下面这个例子就是将当前目录及所有子目录下的所有pom.xml文件中的”http://repo1.maven.org/maven2“ 替换为”http://localhost:8081/nexus/content/groups/public“.
find -name 'pom.xml' | xargs perl -pi -e 's|http://repo1.maven.org/maven2|http://localhost:8081/nexus/content /groups/public|g'这里用到了Perl语言,
perl -pi -e 在Perl 命令中加上-e 选项,后跟一行代码,那它就会像运行一个普通的Perl 脚本那样运行该代码.
从命令行中使用Perl 能够帮助实现一些强大的、实时的转换。认真研究正则表达式,并正确地使用,将会为您省去大量的手工编辑工作。
find -name 'pom.xml' | xargs perl -pi -e 's|http://repo1.maven.org/maven2|http://localhost:8081/nexus/content/groups/public|g'
 
方法2:

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 前的 '



你可能感兴趣的:(shell中文件处理及字符串处理)