ruby語法之哈希 =》至關於python的字典python
ruby語法之數組 =》至關於python的列表linux
舉例:git
gitaly= Hash.new #創建新Hash類型 gitaly['first']="myfirst" gitaly['storage'] = [ { 'name' => 'default', 'path' => '/tmp/path-1' }, { 'name' => 'nfs1', 'path' => '/mnt/nfs1' } ] puts gitaly #{"first"=>"myfirst", "storage"=>[{"name"=>"default", "path"=>"/tmp/path-1"}, {"name"=>"nfs1", "path"=>"/mnt/nfs1"}]} puts gitaly.keys #first storage puts gitaly['storage'][0] #{"name"=>"default", "path"=>"/tmp/path-1"} puts gitaly['storage'][-1] #{"name"=>"nfs1", "path"=>"/mnt/nfs1"} puts gitaly.size # 2 test=[] #新的空的數組類型 test[0]="a" test[1]='k' puts test # a k
數組的增:
test << "b" #["a","k","b"]
test.push("b") #數組尾部增長元素
test.xshift("b") #頭部增長元素
數組的刪:
test.pop #後面不加元素,依次從尾部刪除一個元素
test.shift #後面不加元素,依次從頭部刪除一個元素
test.delete("a") #刪除元素a ,有多個a都刪除
test.delete_at(2) #刪除某個索引位置的元素
數組的去重:bb=test.uniq #不改變test的值,改變原數組用uniq!
數組變成字符串:kk=["a","b","a"];bb=kk.join("-") # a-b-a 使用某個符合鏈接,能夠是多個字符
將字符串變成數組:kk="abcd";bb=kk.split(//) #【"a","b","c","d"】
數組的排序:kk=["a","b","a"];bb=kk.sort;puts bb # a a b
查看數據的類型shell
aa='aa' puts aa.class
ruby語法之處理字符串
json
puts aa 改 aa='hello world' aa['hello']='first' #匹配第一個符合條件的字符串,區別python的字符串 puts aa #first world puts aa.class #string aa='hello world' aa[0..4]='first' puts aa #first world puts aa.class #string aa='hello world hello' aa.gsub('hello','first') #替換全部符合條件的字符串 puts aa #hello world hello puts aa.class #string aa='hello world' aa.insert 5,' my' #在指定位置插入字符串 puts aa #hello my world puts aa.class #string 增 kk='abc' kk<<'def' #用來拼接字符串 puts kk #abcdef
刪
#chomp和chomp!的區別是 chomp!會改變原字符串
aa='hello world!' aa.chop! #刪除最後一個字符,改變了原字符串,使用chop不會改變原來的字符串 puts aa # hello world puts aa.class #string
#刪除尾部指定單個字符或者字符串
aa="hellohello"
bb=aa.chomp!("o") #或者 bb=aa.chomp!("llo"),可是裏面若是是he的話,bb就是空值,aa不變vim
puts aa #hellohell
puts bb #hellohell數組
#刪除開頭第一個字符
str[0]=""
#刪除結尾最後一個字符
str[-1]=""
#使用delete方法刪除指定字符串,deleteh和delete!區別和chomp相似
puts "hello".delete "abcdefghijkl" #o
#tr和tr! 修改爲對應的字符,一個一個比對,沒有則替換成前面一個替換的字母
"hello".tr!("lexyz","pi") #hippo
hello".tr("lho","km") #mekko -> l替換成k h替換成m,o也替換成m
#到這裏發現tr命令很強大啊,那麼能夠用它來刪除了
hellohello".tr("lh","") #eoeo
ruby插件之json將字符串轉化成哈希ruby
#!/usr/bin/ruby require 'json' aa="{\"a\":\"1\",\"b\":\"2\"}" #字符串,json裏面沒有單引號 bb=JSON.parse(aa) #使用json進行轉化 puts bb.class #類型變爲Hash puts bb["c"] #沒有不報錯,可是爲空 puts bb["a"] # 1 puts bb # {"a"=>"1", "b"=>"2"}
ruby讀入文件 IO.readlinesapp
[root@orl11-infa ~]# cat test1.rb #!/usr/bin/ruby arr=IO.readlines("tt.txt")
puts arr.class puts arr puts "------------------------" puts arr[0] [root@orl11-infa ~]# vim test1.rb [root@orl11-infa ~]# ruby test1.rb #運行結果 Array #變成數組類型 1 first line 2 second line ------------------------ 1 first line
ruby之寫入文件curl
#先清空後寫入 #!/usr/bin/ruby File.open("r2.txt", "w+") do |file| file.puts "haha" file.puts "heihei" file.close() end #後面追加 File.open("r2.txt", "a+") do |file| file.puts "haha" file.puts "heihei" file.close() end
ruby之打印文件的絕對路徑
puts File.expand_path("r2.txt")
ruby之修改文件的權限
[root@orl11-infa ~]# cat test1.rb #!/usr/bin/ruby file=File.new("tt.txt","w") file.chmod(0755) [root@orl11-infa ~]# ll tt.txt -rw-r--r-- 1 root root 27 10月 28 16:22 tt.txt [root@orl11-infa ~]# ruby test1.rb [root@orl11-infa ~]# ll tt.txt -rwxr-xr-x 1 root root 0 10月 28 16:27 tt.txt
ruby語法之判斷if
x=1 if x > 2 puts "x 大於 2" elsif x <= 2 and x!=0 puts "x 是 1" else puts "沒法得知 x 的值" end
其餘:對當前條件不作處理,使用next
ruby語法之循環
for i in 0..5 puts "局部變量的值爲 #{i}" end
ruby語法:循環each
[root@orl11-infa ~]# cat test2.rb #!/usr/bin/ruby aa=['awk','block','cd'] aa.each do |temp| if temp.include? 'c' puts temp end end
[root@orl11-infa ~]# ruby test2.rb
block
cd
舉例:根據以前logstash處理季度和search_name的問題如今徹底能夠用ruby語法處理
if "cdpTest" in [tags]{ grok { match => { "message" => "\|%{DATA:userName}\|%{DATA:opreteTimeStamp}\|%{DATA:year}-%{DATA:month}-%{DATA:day} %{DATA:hour}:%{DATA:other}\|%{DATA:deviceModel}\|%{DATA:pageName}\|%{DATA:elementName}\|%{DATA:params}\|%{DATA:appKey}\|%{DATA:ssoSource}\|%{DATA:logType}\|" } } ruby { code => " bb=event.get('[month]').to_i bb=(bb+2)/3 cc=(bb.to_s)<<'季度' event.set('quarter',cc) aa=event.get('[params]') require 'json' dd=JSON.parse(aa) if dd['search_name'] event.set('search_name',dd['search_name']) end " remove_field => [ "message" ] } } }
ruby語法之計算昨天的日期
#!/usr/bin/ruby require 'date' day=Time.now puts day.strftime("%Y%m%d") day1=Date.new(day.year,day.month,day.day) day1=(day1 - 1).strftime("%Y%m%d") puts "昨天的日期:#{day1}" str="hhh_v"<<day1 puts str
[root@orl11-infa ~]# ruby data.rb
20191028
昨天的日期:20191027
hhh_v20191027
到了這裏,咱們就會想ruby語言和shell的交互
方式一:exec 取代當前進程,不產生子進程,它執行成功後,它後面的命令不會執行 exec "curl -XGET --user elastic:pass 'http://192.168.137.10:9200/_cat/indices' >rb1.txt"
方式二:使用反引號 ``,產生子進程,後面的命令能夠執行
`curl -XGET --user elastic:pass 'http://192.168.137.10:9200/_cat/indices' >rb1.txt`
方式三:使用system,產生子進程,後面的命令會執行,返回命令執行的結果(true或者false)
cmd=system "curl -XGET --user elastic:pass 'http://192.168.137.10:9200/_cat/indices' >rb1.txt"
puts cmd #true
if cmd
puts 'success'
else
puts "failure"
end
方式四:使用%x,後面的命令會執行
%x(for i in `seq 1 5`;do echo $i;done)
%x(echo "hello";echo "haha")
其餘:
ruby腳本的後綴 .rb 變量放入""裏面時,puts "#{kk}"字符串轉化成整形:.to_i整形轉化成字符串:.to_s導入模塊:require 'json'ruby腳本的語法檢查:ruby -c 腳本ruby在linux命令行中執行:ruby -e 'aa="abc";if aa.include? "b";puts "ok";else "no";end'對命令取反,使用:!(正常命令),例如知足不包括的條件 !(bb.include? temp)字符串以什麼開頭:str.start_with("a")特殊符號:\t tab鍵 \s 空格 \n換行 \r回車跳出當前循環:next退出整個循環:break在linux的shell中輸入 irb 進入ruby的語言環境,相似於輸入python進入python環境