`

shell命令学习

阅读更多

shell

 

如何读取一个文件的第一行记录???

head -1 urfile
sed 'q' urfile
awk '{print;exit}' urfile

 

 

 

 

 

    有两天没有寫自己的博客了,本来决定要每天坚持写,看来自己有时就是太懒了,总是会找借口不写了,今天很累明天再写吧,结果明天也没写,明天我一定写两 篇,可是最后一篇都没写。也许这就是人之所以的人之惰性吧,我天生可能就是有一种惰性,很多事情都不是太会去主动做,这是不好而且可能是致命的缺点,所以 决定了还是应该尽量去克服这个缺点,当然如果中间我确实有几天没写,如果不小心耽误了您搜索代码,对不起了,您可千万不要用砖头来拍我,因为现在的砖头不 结实,拍死还好,拍不死可就傻了,那时郁闷也无奈了,呵呵。

    言规正传昨天公司的mary请我帮忙想一下如何去修改一个再linux下的XML文档,如果使用c语言,那当然可以了使用一个对搜索位置的函数通过指针传 递来实现,这个恐怕要好好的想一想,自己的c语言也不是那么的好了,对内存操作n年了总是不能很好的解决,无奈之下女生求助,是绅士的总是要帮一把了您说 对吧,所以没有办法了只要去试试看了,我打算使用shell脚本去实现。

    通过搜集一些资料和自己先前对一些shell脚本的编写,我突然想到来对XML文件进行读取,然后根据cut指令获找到想要的替换,然后之行vi指令中的字符串处理命令来实现。这个方法肯定行了。现在我就把代码贴出来,共享一直是我追求的理念。共享共享。


#!/bin/sh
DIR="tvdevicedesc.xml"
CONF_DIR1="upnp_name.conf"
#cat ${CONF_DIR}
var=`cat ${DIR} | grep "<friendlyName>"`
temp=`echo $var  | cut -f2 -d' '`
tt=`echo $temp | cut -f2 -d'>' | tr -d "</friendlyName>"`
echo $tt
temp2=`cat ${CONF_DIR1}`
echo $temp2
 vi ${DIR} <<-!
 :g/$temp/s//$temp2/g
 :wq
 !

        这就是我写点代码了,这个脚本代码多了一些无用的东西,因为我是要再脚本中查看是不是修改了我需要修改的字符串了所以加入了前面的很多代码其实就三句就可以实现了。

vi ${DIR} <<-!
 :g/$temp/s//$temp2/g
 :wq
 !

前面的都是用来对结果的显示的。当然这个shell是运行再linux下装有vim编辑工具的,如果没有这个工具那么我这个脚本就作废了,如果您看了请注意这个地方。

下面是一个写道公司削减内核下的linux的shell脚本,由于削减内核中内存的存贮有限一般的应用软件都没有装载所以我只好使用些常用的shell语言命令了,代码如下:

#!/bin/sh
DIR="tvdevicedesc.xml"
CONF_DIR1="upnp_name.conf"
#cat ${CONF_DIR}
var=`cat ${DIR} | grep "<friendlyName>"`
temp=`echo $var  | cut -f2 -d' '`
tt=`echo $temp | cut -f2 -d'>' | tr -d "</friendlyName>"`
echo $tt
temp2=`cat ${CONF_DIR1}`
echo $temp2
sed  's/'$tt'/'$temp2'/g' tvdevicedesc.xml >tvdevicedesc.xml
这 里使用到了sed指令,这个指令我从网上了解到好像是对流进行操作的,他的功能是比较强大的,有些参数我没有做过尝试,如果您做过了记得给我留言,燕过留 声 ,人过留名嘛,先谢谢了。对于这个脚本我有点说明,可能是有于tvdevicedesc.xml 存在如果你想把修改后的在写入tvdevicedesc.xml 文件那么文件会变成空。但是如果写成别的文件名字那就没有问题。这个可能就是对数据流操作的先后顺序,因为我不是太明白,这只是我一点点的猜想,如果您知 道什么原因我就不重复了 共享吧 呵呵

 

 

 

最近做一个数据迁移的项目,其中需要替换原来文本 中的一些东西,为了简便当然是写脚本 啦!
可是发现一个小问题,就是在出现$字符 (美元字符)和单引号连接的时候,无法用转移字符\+普通的sed   -i 's/old/new/g'  file name来替换
举个例子:
[root @localhost ~]# touch test
[root@localhost ~]#vi test
写入'$aaa'   记住是单引号和$aaa哦
[root@localhost ~]# cat test
'$aaa'
[root@localhost ~]# sed -i 's/\'\$aaa\'/bbb/g' test
>
(提示 要我继续输入???看来是出错了)
[root@localhost ~]# sed -i "s/\'\$aaa\'/bbb/g" test
[root@localhost ~]# cat test
'$aaa'
(内容居然没变,后来经过隋老师大神的指导,终于发现以下方法可以一次性解决 问题)
[root@localhost ~]#  sed -i.bak -r "s/[[:punct:]]+aaa[[:punct:]]/bbb/g"  test
bbb
[root@localhost ~]# cat test
bbb

我擦,成功了,信老师得成功

当然,还有另一种解决办法,就是替换两次(这可是本人想到的哦)
这个方法大家应该都会就是先
sed -i 's/\$//g' test

sed -i "s/\'aaa\'/bbb/g" (记住此处要用双引号引起)

成功了╮(╯▽╰)╭但是比起老师的一步到位还差的很远呀

 

shell替换文本中指定内容 的命令
2009-08-28 17:52
方法1:
sed -i 's/被替换的内容/要替换成的内容/' file
方法2:
sed 's/被替换的内容/要替换成的内容/g' file > file.out
mv file.out file

替换特殊字符时,要在特殊字符前加\,如要将agent.ini中的test替换为/database: sed -i 's/test/\/database/' agent.ini

要使用变量替原来的字符: sed 's/222/'$user_name'/g' file.txt   (使用$user_name替换222)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics