一、linux的grep:
-n 选项相当于在-e指定的代码外边包上一层 while gets ... end
$_表示当前行
在多个文件搜索:
如果你想显示匹配的行,文件,以及行号,可以这么做:
二、find命令:
shell命令:
ruby:
三、sed命令:
1、处理注释:
所有代码注释掉:
这个只会在命令行输入,我们想覆盖原来的文件,我们可以用shell的重定向来实现:
但是这个不适合处理多个文件,ruby有一个选项可以做这个事情,就是-i选项:
如果我们还想同时备份原文件,那么可以这么做:
这样原来的文件会备份为test.rb.bak
我们想把文件中所有注释行都去掉:
2、使用行号:
我们想给每一行加上行号:
这样一个记录:
zhangsan 12 175
lisi 22 178
每行字段以tab键分割。
把每一行的放到一个文件中:
四、awk的功能:
我们想对上面的程序每个字段一行存放,我们可以使用-a自动分割选项:
同样是上面的记录,但是以,分割
我们想交换第一和第二字段:
可以使用-F指定分割
五、ls功能:
在当前目录下列出所有大小大于1k的所有c语言源文件,并按照修改时间排序:
可以使用Array的sort_by来做:
ruby -ne 'puts $_ if $_ =~ /foo/' /usr/share/dic/words
-n 选项相当于在-e指定的代码外边包上一层 while gets ... end
$_表示当前行
在多个文件搜索:
ruby -ne 'puts $_ if $_ =~ /foo/' /user/share/dic/*
如果你想显示匹配的行,文件,以及行号,可以这么做:
ruby -ne 'printf("%s\tin file:%s\tline %d\n",$_.strip,$<.filename,$.) if $_ =~ /foo/' /user/share/dic/*
二、find命令:
shell命令:
find . -type f -exec test -s {}/..data/log \; -print
ruby:
ruby -e 'Dir["**/**"].each{|f| p f if File.ftype(f) == "file" and File.size("#{f}/..data/log") > 0 }'
三、sed命令:
1、处理注释:
所有代码注释掉:
ruby -pe '$_ = "#" + $_' test.rb
这个只会在命令行输入,我们想覆盖原来的文件,我们可以用shell的重定向来实现:
ruby -pe '$_ = "#" + $_' test.rb > test.rb
但是这个不适合处理多个文件,ruby有一个选项可以做这个事情,就是-i选项:
ruby -i -pe '$_ = "#" + $_' test.rb
如果我们还想同时备份原文件,那么可以这么做:
ruby -i.bak -pe '$_ = "#" + $_' test.rb
这样原来的文件会备份为test.rb.bak
我们想把文件中所有注释行都去掉:
ruby -i.bak -ne 'puts $_ unless $_ =~/^#/' *.rb
2、使用行号:
我们想给每一行加上行号:
ruby -i.bak -ne 'puts $_ = $. + ": " + $_' file1
这样一个记录:
zhangsan 12 175
lisi 22 178
每行字段以tab键分割。
把每一行的放到一个文件中:
ruby -ne 'open("/tmp/test/user_#{$.}","w"){|f| f.puts $_}' user_info
四、awk的功能:
我们想对上面的程序每个字段一行存放,我们可以使用-a自动分割选项:
ruby -a -ne 'open('/tmp/test/user_#{$.}","w"){|f| f.puts $F }' user_info
同样是上面的记录,但是以,分割
我们想交换第一和第二字段:
ruby -a -F, -i -ne 'puts $F.values_at(1,0,2).join("\t") user_info
可以使用-F指定分割
五、ls功能:
在当前目录下列出所有大小大于1k的所有c语言源文件,并按照修改时间排序:
ruby -e 'puts Dir["*.c"].find{|f| File.size(f) > 1024}.sort{|f1,f2| File.mtime(f1) <=> File.mtime(f2)}'
可以使用Array的sort_by来做:
ruby -e 'puts Dir["*.c"].find{|f| Fle.size(f) > 1024}.sort_by{|f| File.mtime(f)}'