Tuesday, 13. June 2006, 05:09:22
grep, tips, regexp
在
"sed的in-place edit选项,和RTFM"中,说到过:
...关于 Search and Replace 和 Regular Expression,还有一个问题困扰我,在这儿记下来。 就是将文件中符合某个pattern的字符串打印出来。注意,只是符合这个pattern的字符串本身,而不是所在行。直接一看,这怎么都是grep的工作嘛,可以在对grep狠狠的RTFM以后,还是未果...
在
GNU grep's new features上看到
If you haven't been paying attention to GNU grep recently, you should be happily surprised by some of the new features and options that have come about with the 2.5 series. They bring it functionality you can't get anywhere else -- including the ability to output only matched patterns (not lines), color output, and new file and directory options.
于是特地又看了一下grep的man page,我手边的是公司里cygwin下的grep-2.5.1a,果然有这么一个参数:
-o, --only-matching show only the part of a line matching PATTERN
试了一下,真是好用。看来是2.5系列新加的功能。(不过现在又不免想,是不是早在发
sed的in-place edit选项,和RTFM,grep就已经有-o可用了?汗~……)
Sunday, 12. March 2006, 16:05:09
linux, sed, tips, regexp
在Debian Administration上看到Search and replace across many files with a perl one-liner这篇文章。多文件的Search and Replace的Linux风格处理方式,也是我一直思考的,这篇文章提供的是一个perl的解决方案。而对于这种问题,最直接想到的解决方案应该是sed吧?而且对于Perl,我到现在还是个门外汉。
不过一直以为sed不能直接对源文件修改,必须重定向到新文件,所以觉得在批量处理中很麻烦,因为每次都必须指定新文件名,然后在覆盖回源文件。为此还傻傻的专门写过一个runsed的shell脚本用于处理重定向到中间文件再覆盖回源文件的工作,让sed可以直接修改源文件,适用于批量处理。还沾沾自喜,以为找到了最终的解决方案。
在上面这篇文章中,比较关键的是用到了perl的 -i 参数edit the files in-place,直接修改源文件。这时候我想,sed也是应该有这么一个in-place edit的选项的,只是我以前没有找到罢了。于是man sed,然后在man page的32行就看到了
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension supplied)
这个参数。这时候才觉得自己好傻,没有好好的
RTFM,而且还好好的自作聪明了一把。
sed的这个 -i[SUFFIX], –in-place[=SUFFIX] 参数功能还真的很强,除了能够直接修改源文件,还能自动备份源文件,指出备份文件的suffix,真是非常方便。(居家旅游,杀人灭口,必备良药?XD)又可以快乐的sed生活了。
现在,关于 Search and Replace 和 Regular Expression,还有一个问题困扰我,在这儿记下来。
就是将文件中符合某个pattern的字符串打印出来。注意,只是符合这个pattern的字符串本身,而不是所在行。直接一看,这怎么都是grep的工作嘛,可以在对grep狠狠的RTFM以后,还是未果。真是奇怪,总觉得打印搜索到的pattern本身,比打印行要容易的多嘛,怎么会这么难找?Python脚本自然可以很容易就实现,但是总觉得已有的shell工具肯定是有这样的功能了,只是我没找到罢了。希望有达人指点。(不要告诉我grep后sed哦~)