實用的bash指令碼

來源:互聯網
上載者:User

實用的bash指令碼 ping區域網路中所有的機器 for i in `seq 1 254`;do (ping 192.168.0.$i &);sleep 0.1;killall ping;done for i  in `seq 1 10`;do ping 10.228.151.$i -c1;done|grep ttl批量在用戶端添加hosts對應關係 #!/bin/bash for ((i=2; i<=100; i++)) do         _ip=10.11.45.$i         ssh $_ip "echo \"${_ip}       \"\$(hostname) >> /etc/hosts" done 用戶端命令執行工具 vim batch_run.sh #!/bin/bash # wangyang usage () {         echo "Usage $0 list_file \"command\""         exit 1 }   if [[ $# != 2 ]]; then         usage fi   _file=$1 _command=$2   if [ ! -f $_file ]; then         echo "ERR can't find list file $_file"         exit 2 fi   for _ip in $(cat $_file|grep -v "^#") do         echo $_ip         ssh $_ip "$_command"         echo done vim hosts.txt 192.168.0.2 192.168.0.3 192.168.0.4 例子: #batch_run.sh  hosts.txt  "cat /etc/hosts"   檔案分髮腳本 vim batch_cp.sh #!/bin/bash usage () {         echo "Usage $0 list_file local_file remote_path"         exit 1 } if [[ $# != 3 ]]; then         usage fi _file=$1 _lf=$2 _rp=$3 if [ ! -f $_file ]; then         echo "ERR can't find list file $_file"         exit 2 fi for _ip in $(cat $_file|grep -v "^#") do         echo $_ip         scp -r $_lf $_ip:$_rp         echo done vim hosts.txt 192.168.0.2 192.168.0.3 192.168.0.4 例子: #./batch_cp.sh hosts.txt  /tmp/aaa   /root/     刪除文本中得重複行 在進行文本處理的時候,我們經常遇到要重複資料刪除行的情況。那怎麼解決呢?下面就是三種常見方法?第一,用sort+uniq,注意,單純uniq是不行的。 shell> sort file | uniq 這裡我做了個簡單的測試,當file中的重複行不再一起的時候,uniq將服務刪除所有的重複行。經過排序後,所有相同的行都在相鄰,因此unqi可以正常重複資料刪除行。第二,用sort+awk命令,注意,單純awk同樣不行,原因同上。  shell> sort file | awk '{if ($0!=line) print;line=$0}' awk '!a[$0]++' fetion_info.txt 當然,自己把管道後面的代碼重新設計一下,可能不需要sort命令先排序拉。第三,用sort+sed命令,同樣需要sort命令先排序。 shell> sort file | sed '$!N; /^(.*)n1$/!P; D'最後附一個必須先用sort排序的文本的例子,當然,這個需要用sort排序的原因是很簡單,就是後面演算法設計的時候的“局部性,相同的行可能分散出現在不同的地區,一旦有新的相同行出現,那麼前面的已經出現的記錄就被覆蓋了     comm --取兩個檔案的差集合并集 今天需要取兩個檔案的並集,自己寫指令碼處理太麻煩,一查,果然有現成的工具,comm。需要注意的事,使用comm之前,兩個檔案都是必須是sort好了的。 In our work, we often encounter the following questions:在我們的工作中,我經常遇到下面的問題:I have two files: file1 and file2:有兩個檔案:檔案1和檔案2:1) How can I print out the lines that are only contained in file1?1) 如何列印出只存在於檔案1中的內容?2) How can I print out the lines that are only contained in file2?2) 如何列印出只存在於檔案2中的內容?3) How can I print out the lines that are contained both in file1 and file2?3) 如何列印出檔案1和檔案2都有的內容? There is a powerful shell command that can easily meet our needs, it is: comm. 這有一個很好的shell命令能夠滿足我們的需求,它就是comm。 When you meet the above questions, "comm" should be your first choice:-)當你遇到上面的問題,“comm”應該是你第一選擇:-) comm [ -123 ]??file1??file2 comm will read file1 and file2 and generate three columns of output: comm 將會讀取檔案1和檔案2並且產生三列輸出:lines only in file1; lines only??in file2; and lines in both files. 只存在檔案1中的行;只存在檔案2中的行;兩個檔案都存在的行。For detailed explanation, pls man comm.更詳細的解釋,請參閱man comm。 Example:例如: bash-2.03$ cat file1111111112222222233333333444444445555555566666666777777778888888899999999bash-2.03$ cat file20000000022222222444444446666666688888888 1) suppress lines unique to FILE11) 過濾掉file1中的內容bash-2.03$ comm -1 file1 file2 00000000        22222222        44444444        66666666        88888888 2) suppress lines unique to FILE22) 過濾掉file2中的內容bash-2.03$ comm -2 file1 file2 11111111        2222222233333333        4444444455555555        6666666677777777        8888888899999999 3) suppress lines that appear in both files3) 過濾掉file1和file2中都有的內容bash-2.03$ comm -3 file1 file2         000000001111111133333333555555557777777799999999 4) Print out the lines that are only contained in file1?4) 列印出只存在於檔案1中的內容?bash-2.03$ comm -23 file1 file21111111133333333555555557777777799999999 5) Print out the lines that are only contained in file2?5) 列印出只存在於檔案2中的內容?bash-2.03$ comm -13 file1 file200000000 6) Print out the lines that are contained both in file1 and file2?6) 列印出檔案1和檔案2都有的內容?bash-2.03$ comm -12 file1 file222222222444444446666666688888888 Besides the comm, we still have various ways to finish the above tasks.除了comm,我們還有其他方法來完成這些任務。 4) Print out the lines that are only contained in file1?4) 列印出只存在於檔案1中的內容?diff file1 file2 | grep "^<"|sed 's/^< //g'for i in $(>temp ; done;cat temp

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.