您的位置:首页 > 运维架构 > Shell

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

2013-05-27 19:25 281 查看
文章结束给大家来个程序员笑话:[M]

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

/article/2357162.html

关于正值表达式

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

文章结束给大家分享下程序员的一些笑话语录:

问:你觉得让你女朋友(或者任何一个女的)从你和李彦宏之间选一个,你觉得她会选谁?  

  答:因为李艳红这种败类,所以我没女友!

---------------------------------
原创文章 By
设置和字符串
---------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: