訓練家的佈弱格-Patch1.2

The BLOG of trainer



編輯日期:2009-12-01 19:17

類型:Linux 心得
作者:羽山
文章時間:2009-12-01 19:17:31
瀏覽人數:5270人
標題: head tail sed, how to get lins-to-lins between a file
網址:http://sunnyriver.3wa.tw/blog/blog.php?id=940
內容:
 

最近比較有空,偶爾又來寫點文件好了 (被主管發現就不好了,偷偷的把時間改成下班時間寫的...科科)

 

在ptt的linuxDev版,看到有人在求救這樣子的問題,那我也花時間研空了一下怎用

 

如果今天有個檔案,如 a.txt 的內容如下:

第零行

第一行

第二行

第三行

第四行

第五行

第六行

.....

第十行

 

今天我想用一行shell script,來抽出我要哪些行數,怎麼作呢?

 

比如我只要印出

第二行

第三行

第四行

 

也許有些老手,知道怎麼用 head+tail去抓這樣的內容

 

# head a.txt -n5|tail -n 3

 

這樣的指令可以印出

[root@localhost tmp]# head a.txt -n5|tail -n 3
第二行
第三行
第四行

 

看起來是還不錯,那麼,用 sed 怎用呢~

# sed -n 3,5p a.txt

 

[root@localhost tmp]# sed -n 3,5p a.txt
第二行
第三行
第四行

 

呵~這樣的問題上google其實還滿好找的,但問題總是會一摎延延延伸啊~~~

有人的野心比較大,想要查 2~5行,又要查 7~10行,然後一起印

 

所以就研究了下面的方法了...

 

[root@localhost tmp]# _TMP='3,6p 8,11p'; for i in $_TMP;do sed -n $i a.txt; done
第二行
第三行
第四行
第五行
第七行
第八行
第九行
第十行

 

可是這樣的寫法,總有一天會遺忘啊...而且有發現 sed 給的行數都要加1,看的有點不太習慣,我就寫了支 php

的小檔,作成處理此功能的函式~


請將以下的內容存到 /usr/bin/3wa_file_readline.sh
#!/usr/bin/env php
if($argc==1||$argc[2]=='-h')
{
  echo "\n
  這支程式可以讀檔案,並且指定行數呦~\n
  使用方法如下:\n\n
  # {$argv[0]} [file] [pn,pn] [pn,pn]\n\n
  如這個範例:\n\n
  # {$argv[0]} /etc/passwd 1,3 7,10\n\n

  3WA 問題解決專家工作室\n\n";
  exit(0);
}
if(file_exists($argv[1])==false)
{
  echo "\n檔案不存在Orz\n";
  exit(1);
}
$d=explode("\n",file_get_contents($argv[1]));

for($i=2;$i<$argc;$i++){
  $p=explode(',',$argv[$i]);
  if($p[0]>=$p[1])
  {
    $p[0]^=$p[1];
    $p[1]^=$p[0];
    $p[0]^=$p[1];
  }
  for($j=current($p);$j<=end($p);$j++)

  {
    echo $d[$j]."\n";
  }
}
?>


試玩看看~
[root@localhost tmp]# chmod +x /usr/bin/3wa_file_readline.sh

[root@localhost tmp]# 3wa_file_read_line.sh
這支程式可以讀檔案,並且指定行數呦~
使用方法如下:
           # /usr/bin/3wa_file_read_line.sh [file] [pn,pn] [pn,pn]
如這個範例:
           # /usr/bin/3wa_file_read_line.sh /etc/passwd 1,3 7,10

                                                    3WA 問題解決專家工作室

 

[root@localhost tmp]# 3wa_file_read_line.sh a.txt 3,5
第三行
第四行
第五行

[root@localhost tmp]# 3wa_file_read_line.sh a.txt 3,5 6,7 1,2
第三行
第四行
第五行
第六行
第七行
第一行
第二行

啊~沒裝php就沒辦法嘍^^"

 

首頁  上十頁  上一頁  1 下一頁    最末頁 (總共有...1頁)

第 1 頁

有話要說  看留言 【1】
其他分類
當月訓練
(2009-12-27)
【網誌】框圖系統功能

(2009-12-17)
【網誌】翻譯機的修復...

(2009-12-08)
【FZR 150】整流器所造成的車況問題

(2009-12-01)
【Linux 心得】head tail sed, how to get lins-to-lins between a file

最新訓練
(2024-12-22)
【KTM 390】KTM RC390 更換後輪

(2024-12-17)
【木工】三樓客廳椅子維修

(2024-12-17)
【出遊】聯合大學一日遊

(2024-12-02)
【NSR 150】NSR150 改裝回 14T

(2024-11-04)
【酷龍 150】酷龍150 換新鏈條 里程:39250km

(2024-10-31)
【機車綜合相關】煞車檢測筆測量電阻範圍

(2024-10-29)
【機車綜合相關】拆胎特工-輪胎拆胎架

(2024-10-25)
【NSR 150】NSR150 更換前煞車油(簡易) 43177km

(2024-10-25)
【網誌】加密文章測試

(2024-10-19)
【本田 MSX-125】MSX-125 更換前輪軸承