最近正在看正则表达式,书上有两个例子,但是我看的很晕菜,下面是我自己的理解,请高手给看看:
1.
mv atlga.xml atlga.xml.old
sed 's/Atlanta/&, the capital of the South/' < atlga.xml.old > atlga.xml
个人理解是:
移动 atlga.xml 和 atlga.xml.old这两个文件,但是没看懂要移动到哪儿去
替换atlga.xml.old中 Atlanta 开始的字符为‘the capital of the South’ 再输入到atlga.xml
2.
$ echo /home/tolstoy/ | sed 's;\(/home\)/tolstoy/;\1/lt/;'
/home/lt/
个人理解是:
输出/home.tolstory/的内容 | 管道后面的完全理解不了,就知道要替换,但是替换的是什么完全没看懂。
                  	
				

咖啡男孩 于 2011-08-12 01:06:48发表:
这个~相思爱文的解释已经很到位了,不赘言……如果真对正则表达式感兴趣,awk也不可不了解。
gwssgc 于 2011-08-11 21:07:13发表:
[i=s] 本帖最后由 gwssgc 于 2011-8-11 21:37 编辑 [/i]
感谢版主指点,还是要好好看看bash啊!
主要是sed 's;\(/home\)/tolstoy/;\1/lt/;'这段有点儿晕
这句里面's;后面的这个;是起什么作用的呢?
相思爱文 于 2011-08-11 18:14:11发表:
先读基础教程,主要是bash要先明白,然后把例子拆分开就好理解了。
sed 's=///=test=' 这两个结果一样,但后面的更清晰  
http://linux-vbird.bluedata.org/
mv atlga.xml atlga.xml.old
sed 's/Atlanta/&, the capital of the South/' < atlga.xml.old > atlga.xml
mv 将atlga.xml改名为atlga.xml.old,这时atlga.xml已经不存在了,而多了一个atlga.xml.old。
< 将atlga.xml.old中的内容进行处理
> 处理结果保存在atlga.xml文件中,这是新建的文件
sed 这才是正则表达式,将搜索字符串“Atlanta”改为“&, the capital of the South”
echo /home/tolstoy/ | sed 's;\(/home\)/tolstoy/;\1/lt/;'
echo就是输出字符串"/home/tolstoy/"
sed是对字符串"/hom/tolstoy/"进行处理
sed 's;\(/home\)/tolstoy/;\1/lt/;'
搜索/home/tolstoy/,改为/home/lt/
正则表达式的分隔符,除了/外,有时可用其他的。
/@=;都是分隔符,比如要查找替换字符"/",若用/做为分隔符,要对处理的字符用\转义,很麻烦,看着还乱。这时用=分隔,/就是普通字符了,不用转义。
举例echo aa///aa>test
sed 's/\/\/\//test/'