訓練家的佈弱格-Patch1.2

The BLOG of trainer



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

類型:Linux 心得
作者:羽山
文章時間:2009-12-01 19:17:31
瀏覽人數:4735人
標題: head tail sed, how to get lins-to-lins between a file
網址:http://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-03-09)
【HONDA CBR1000RR】CBR1000RR 原廠管

(2024-02-24)
【NSR 150】NSR150 整理後卡鉗

(2024-02-14)
【機車綜合相關】買了牧田的打氣機與心得

(2024-02-10)
【NSR 150】NSR150 整流器接頭重作

(2024-02-09)
【機車綜合相關】鋰電、鋰鐵電池、電源充電器

(2024-01-07)
【NSR 150】NSR150 貨架耳朵斷裂維修

(2024-01-06)
【KTM 390】KTM Duke390 維修發電問題 電盤內仁

(2023-12-29)
【NSR 150】NSR150 改可調拉桿

(2023-11-20)
【遊戲 / 生活】防盜洗手罐

(2023-11-17)
【KTM 390】KTM Duke390 製作鋰鐵電池