訓練家的佈弱格-Patch1.2

The BLOG of trainer



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

類型:Linux 心得
作者:羽山
文章時間:2009-12-01 19:17:31
瀏覽人數:5106人
標題: head tail sed, how to get lins-to-lins between a file
網址:http://demo.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-09-15)
【FZR 150】FZR維修-大閔廢鐵號

(2024-09-11)
【遊戲 / 生活】更換新的濾水器水龍頭

(2024-09-04)
【NSR 150】NSR150 大燈燈炮更換

(2024-09-01)
【KTM 390】KTM Duke 390 安裝空濾盒、水箱水、油箱、試發動

(2024-08-31)
【KTM 390】KTM Duke 390 引擎上車、節流閥安裝、空濾盒修補、單向閥思考

(2024-08-30)
【機車綜合相關】買了一組盜版牧田DTW1002

(2024-08-25)
【KTM 390】KTM Duke 390 汽門間隙檢查、凸輪軸安裝、汽缸蓋、機油壓力開關

(2024-08-24)
【KTM 390】KTM Duke 390更換內鏈排骨

(2024-08-17)
【KTM 390】KTM Duke 390內鏈排骨問題查修-清洗篇

(2024-08-10)
【KTM 390】KTM Duke 390內鏈排骨問題查修-中(落引擎)