PIXNET Logo登入

胖虎的祕密基地

跳到主文

我是孩子王~我是人見人愛的胖虎~~

部落格全站分類:數位生活

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 10月 07 週二 200822:39
  • [轉貼] SHELL SCRIPTING 教學與心得

本篇出處: SHELL SCRIPTING 教學與心得 by 許景超
這個範例中有 expect 的應用。


# 系統登入後 提示選單 選擇連上 PTT BBS (2007/03/22新增)
這是懶人的做法, 就是登入login系統後, 出現一個選單, 選單內
讓你能夠選擇連上 PTT BBS , 並且自動登入 PTT BBS , 這個有利用
expect , 也就是hacker喜歡用的一個工具 , 直接看例子吧 :
檔案 1 : 命名 bbs.sh
#!/bin/bash
while [ 1 ]; do
   clear
   echo "==================================================="
   echo "  (1) PTT BBS          "          #註解:我只給一個選項 for test
   echo "  (q) QUIT             "          #註解:要更多 請自己加
   echo "  (0) 離開選單         "          #註解:要更多 請自己加
   echo "==================================================="
   echo -n "your choice? ==> "
   read ans
   case $ans in
        1)
           ptt.expect                #註解:所以你還必須有個 ptt.expect 檔案
           ;;
        q)
           kill -9 $MY_PID     #註解:這個必須在你的 .login 中註明
           ;;
        0)
           exit
           ;;
        *)
           echo "Please choose the number from the list"
           ;;
   esac
done
檔案結束
檔案 2 : 命名 ptt.expect           #系統必須安裝expect套件喔
#!/usr/local/bin/expect --         #註解:路徑請自行修改喔
set host 140.112.90.72             #註解:這裡是ptt.cc的 IP , 用ptt.cc也OK
spawn telnet $host
expect "入代號"
send "superman "                 #註解:把你的帳號名稱放這裡
expect "輸入您的密"
send "supermanisgoodboy "        #註解:把你的密碼放這裡
send " "
interact
檔案結束
檔案 3 : $HOME/.login  or $HOME/.bashrc  or $HOME/.tcshrc
         依照你自己設定 看看你一進入系統會讀取哪個檔案
         我只有用兩行 說明  當然你可能還有自己的變數 or 設定
export MY_PID $$        #註解:這個是給 bbs.sh 用的
bbs.sh                  #啟動剛剛的 bbs.sh  路逕自己寫.
檔案結束
(繼續閱讀...)
文章標籤

正義的胖虎 發表在 痞客邦 留言(0) 人氣(3,032)

  • 個人分類:
▲top
  • 10月 07 週二 200822:36
  • [轉貼] SED單行腳本快速參考

本篇出自: http://sed.sourceforge.net/sed1line_zh-CN.html


SED單行腳本快速參考(Unix 流編輯器)                       2005年12月29日
英文標題:USEFUL ONE-LINE SCRIPTS FOR SED (Unix stream editor)
原標題:HANDY ONE-LINERS FOR SED (Unix stream editor)
整理:Eric Pement  - 電郵:pemente[at]northpark[dot]edu         版本5.5
譯者:Joe Hong     - 電郵:hq00e[at]126[dot]com
在以下地址可找到本文檔的最新(英文)版本:
   http://sed.sourceforge.net/sed1line.txt
   http://www.pement.org/sed/sed1line.txt
其他語言版本:
  中文          - http://sed.sourceforge.net/sed1line_zh-CN.html
  捷克語        - http://sed.sourceforge.net/sed1line_cz.html
  荷語          - http://sed.sourceforge.net/sed1line_nl.html
  法語          - http://sed.sourceforge.net/sed1line_fr.html
  德語          - http://sed.sourceforge.net/sed1line_de.html
  葡語          - http://sed.sourceforge.net/sed1line_pt-BR.html
文本間隔:
--------
 # 在每一行後面增加一空行
 sed G
 # 將原來的所有空行刪除並在每一行後面增加一空行。
 # 這樣在輸出的文本中每一行後面將有且只有一空行。
 sed '/^$/d;G'
 # 在每一行後面增加兩行空行
 sed 'G;G'
 # 將第一個腳本所產生的所有空行刪除(即刪除所有偶數行)
 sed 'n;d'
 # 在匹配式樣「regex」的行之前插入一空行
 sed '/regex/{x;p;x;}'
 # 在匹配式樣「regex」的行之後插入一空行
 sed '/regex/G'
 # 在匹配式樣「regex」的行之前和之後各插入一空行
 sed '/regex/{x;p;x;G;}'
編號:
--------
 # 為文件中的每一行進行編號(簡單的左對齊方式)。這裡使用了「製表符」
 # (tab,見本文末尾關於'    '的用法的描述)而不是空格來對齊邊緣。
 sed = filename | sed 'N;s/ /    /'
 # 對文件中的所有行編號(行號在左,文字右端對齊)。
 sed = filename | sed 'N; s/^/     /; s/ *(.{6,}) /1  /'
 # 對文件中的所有行編號,但只顯示非空白行的行號。
 sed '/./=' filename | sed '/./N; s/ / /'
 # 計算行數 (模擬 "wc -l")
 sed -n '$='
文本轉換和替代:
--------
 # Unix環境:轉換DOS的新行符(CR/LF)為Unix格式。
 sed 's/.$//'                     # 假設所有行以CR/LF結束
 sed 's/^M$//'                    # 在bash/tcsh中,將按Ctrl-M改為按Ctrl-V
 sed 's/x0D$//'                  # ssed、gsed 3.02.80,及更高版本
 # Unix環境:轉換Unix的新行符(LF)為DOS格式。
 sed "s/$/`echo -e `/"        # 在ksh下所使用的命令
 sed 's/$'"/`echo `/"         # 在bash下所使用的命令
 sed "s/$/`echo `/"           # 在zsh下所使用的命令
 sed 's/$/ /'                    # gsed 3.02.80 及更高版本
 # DOS環境:轉換Unix新行符(LF)為DOS格式。
 sed "s/$//"                      # 方法 1
 sed -n p                         # 方法 2
 # DOS環境:轉換DOS新行符(CR/LF)為Unix格式。
 # 下面的腳本只對UnxUtils sed 4.0.7 及更高版本有效。要識別UnxUtils版本的
 #  sed可以通過其特有的「--text」選項。你可以使用幫助選項(「--help」)看
 # 其中有無一個「--text」項以此來判斷所使用的是否是UnxUtils版本。其它DOS
 # 版本的的sed則無法進行這一轉換。但可以用「tr」來實現這一轉換。
 sed "s/ //" infile >outfile     # UnxUtils sed v4.0.7 或更高版本
 tr -d <infile >outfile        # GNU tr 1.22 或更高版本
 # 將每一行前導的「空白字符」(空格,製表符)刪除
 # 使之左對齊
 sed 's/^[     ]*//'                # 見本文末尾關於'    '用法的描述
 # 將每一行拖尾的「空白字符」(空格,製表符)刪除
 sed 's/[     ]*$//'                # 見本文末尾關於'    '用法的描述
 # 將每一行中的前導和拖尾的空白字符刪除
 sed 's/^[     ]*//;s/[     ]*$//'
 # 在每一行開頭處插入5個空格(使全文向右移動5個字符的位置)
 sed 's/^/     /'
 # 以79個字符為寬度,將所有文本右對齊
 sed -e :a -e 's/^.{1,78}$/ &/;ta'  # 78個字符外加最後的一個空格
 # 以79個字符為寬度,使所有文本居中。在方法1中,為了讓文本居中每一行的前
 # 頭和後頭都填充了空格。 在方法2中,在居中文本的過程中只在文本的前面填充
 # 空格,並且最終這些空格將有一半會被刪除。此外每一行的後頭並未填充空格。
 sed  -e :a -e 's/^.{1,77}$/ & /;ta'                     # 方法1
 sed  -e :a -e 's/^.{1,77}$/ &/;ta' -e 's/( *)1/1/'  # 方法2
 # 在每一行中查找字串「foo」,並將找到的「foo」替換為「bar」
 sed 's/foo/bar/'                 # 只替換每一行中的第一個「foo」字串
 sed 's/foo/bar/4'                # 只替換每一行中的第四個「foo」字串
 sed 's/foo/bar/g'                # 將每一行中的所有「foo」都換成「bar」
 sed 's/(.*)foo(.*foo)/1bar2/' # 替換倒數第二個「foo」
 sed 's/(.*)foo/1bar/'            # 替換最後一個「foo」
 # 只在行中出現字串「baz」的情況下將「foo」替換成「bar」
 sed '/baz/s/foo/bar/g'
 # 將「foo」替換成「bar」,並且只在行中未出現字串「baz」的情況下替換
 sed '/baz/!s/foo/bar/g'
 # 不管是「scarlet」「ruby」還是「puce」,一律換成「red」
 sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g'  #對多數的sed都有效
 gsed 's/scarlet|ruby|puce/red/g'               # 只對GNU sed有效
 # 倒置所有行,第一行成為最後一行,依次類推(模擬「tac」)。
 # 由於某些原因,使用下面命令時HHsed v1.5會將文件中的空行刪除
 sed '1!G;h;$!d'               # 方法1
 sed -n '1!G;h;$p'             # 方法2
 # 將行中的字符逆序排列,第一個字成為最後一字,……(模擬「rev」)
 sed '/ /!G;s/(.)(.* )/&21/;//D;s/.//'
 # 將每兩行連接成一行(類似「paste」)
 sed '$!N;s/ / /'
 # 如果當前行以反斜槓「」結束,則將下一行並到當前行末尾
 # 並去掉原來行尾的反斜槓
 sed -e :a -e '/$/N; s/ //; ta'
 # 如果當前行以等號開頭,將當前行並到上一行末尾
 # 並以單個空格代替原來行頭的「=」
 sed -e :a -e '$!N;s/ =/ /;ta' -e 'P;D'
 # 為數字字串增加逗號分隔符號,將「1234567」改為「1,234,567」
 gsed ':a;s/B[0-9]{3}>/,&/;ta'                     # GNU sed
 sed -e :a -e 's/(.*[0-9])([0-9]{3})/1,2/;ta'  # 其他sed
 # 為帶有小數點和負號的數值增加逗號分隔符(GNU sed)
 gsed -r ':a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/12,3/g;ta'
 # 在每5行後增加一空白行 (在第5,10,15,20,等行後增加一空白行)
 gsed '0~5G'                      # 只對GNU sed有效
 sed 'n;n;n;n;G;'                 # 其他sed
選擇性地顯示特定行:
--------
 # 顯示文件中的前10行 (模擬「head」的行為)
 sed 10q
 # 顯示文件中的第一行 (模擬「head -1」命令)
 sed q
 # 顯示文件中的最後10行 (模擬「tail」)
 sed -e :a -e '$q;N;11,$D;ba'
 # 顯示文件中的最後2行(模擬「tail -2」命令)
 sed '$!N;$!D'
 # 顯示文件中的最後一行(模擬「tail -1」)
 sed '$!d'                        # 方法1
 sed -n '$p'                      # 方法2
 # 顯示文件中的倒數第二行
 sed -e '$!{h;d;}' -e x              # 當文件中只有一行時,輸入空行
 sed -e '1{$q;}' -e '$!{h;d;}' -e x  # 當文件中只有一行時,顯示該行
 sed -e '1{$d;}' -e '$!{h;d;}' -e x  # 當文件中只有一行時,不輸出
 # 只顯示匹配正則表達式的行(模擬「grep」)
 sed -n '/regexp/p'               # 方法1
 sed '/regexp/!d'                 # 方法2
 # 只顯示「不」匹配正則表達式的行(模擬「grep -v」)
 sed -n '/regexp/!p'              # 方法1,與前面的命令相對應
 sed '/regexp/d'                  # 方法2,類似的語法
 # 查找「regexp」並將匹配行的上一行顯示出來,但並不顯示匹配行
 sed -n '/regexp/{g;1!p;};h'
 # 查找「regexp」並將匹配行的下一行顯示出來,但並不顯示匹配行
 sed -n '/regexp/{n;p;}'
 # 顯示包含「regexp」的行及其前後行,並在第一行之前加上「regexp」所
 # 在行的行號 (類似「grep -A1 -B1」)
 sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}' -e h
 # 顯示包含「AAA」、「BBB」或「CCC」的行(任意次序)
 sed '/AAA/!d; /BBB/!d; /CCC/!d'  # 字串的次序不影響結果
 # 顯示包含「AAA」、「BBB」和「CCC」的行(固定次序)
 sed '/AAA.*BBB.*CCC/!d'
 # 顯示包含「AAA」「BBB」或「CCC」的行 (模擬「egrep」)
 sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d    # 多數sed
 gsed '/AAA|BBB|CCC/!d'                        # 對GNU sed有效
 # 顯示包含「AAA」的段落 (段落間以空行分隔)
 # HHsed v1.5 必須在「x;」後加入「G;」,接下來的3個腳本都是這樣
 sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'
 # 顯示包含「AAA」「BBB」和「CCC」三個字串的段落 (任意次序)
 sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;/BBB/!d;/CCC/!d'
 # 顯示包含「AAA」、「BBB」、「CCC」三者中任一字串的段落 (任意次序)
 sed -e '/./{H;$!d;}' -e 'x;/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d
 gsed '/./{H;$!d;};x;/AAA|BBB|CCC/b;d'         # 只對GNU sed有效
 # 顯示包含65個或以上字符的行
 sed -n '/^.{65}/p'
 # 顯示包含65個以下字符的行
 sed -n '/^.{65}/!p'            # 方法1,與上面的腳本相對應
 sed '/^.{65}/d'                # 方法2,更簡便一點的方法
 # 顯示部分文本——從包含正則表達式的行開始到最後一行結束
 sed -n '/regexp/,$p'
 # 顯示部分文本——指定行號範圍(從第8至第12行,含8和12行)
 sed -n '8,12p'                   # 方法1
 sed '8,12!d'                     # 方法2
 # 顯示第52行
 sed -n '52p'                     # 方法1
 sed '52!d'                       # 方法2
 sed '52q;d'                      # 方法3, 處理大文件時更有效率
 # 從第3行開始,每7行顯示一次   
 gsed -n '3~7p'                   # 只對GNU sed有效
 sed -n '3,${p;n;n;n;n;n;n;}'     # 其他sed
 # 顯示兩個正則表達式之間的文本(包含)
 sed -n '/Iowa/,/Montana/p'       # 區分大小寫方式
選擇性地刪除特定行:
--------
 # 顯示通篇文檔,除了兩個正則表達式之間的內容
 sed '/Iowa/,/Montana/d'
 # 刪除文件中相鄰的重複行(模擬「uniq」)
 # 只保留重複行中的第一行,其他行刪除
 sed '$!N; /^(.*) 1$/!P; D'
 # 刪除文件中的重複行,不管有無相鄰。注意hold space所能支持的緩存
 # 大小,或者使用GNU sed。
 sed -n 'G; s/ /&&/; /^([ -~]* ).* 1/d; s/ //; h; P'
 # 刪除除重複行外的所有行(模擬「uniq -d」)
 sed '$!N; s/^(.*) 1$/1/; t; D'
 # 刪除文件中開頭的10行
 sed '1,10d'
 # 刪除文件中的最後一行
 sed '$d'
 # 刪除文件中的最後兩行
 sed 'N;$!P;$!D;$d'
 # 刪除文件中的最後10行
 sed -e :a -e '$d;N;2,10ba' -e 'P;D'   # 方法1
 sed -n -e :a -e '1,10!{P;N;D;};N;ba'  # 方法2
 # 刪除8的倍數行
 gsed '0~8d'                           # 只對GNU sed有效
 sed 'n;n;n;n;n;n;n;d;'                # 其他sed
 # 刪除匹配式樣的行
 sed '/pattern/d'                      # 刪除含pattern的行。當然pattern
                                       # 可以換成任何有效的正則表達式
 # 刪除文件中的所有空行(與「grep '.' 」效果相同)
 sed '/^$/d'                           # 方法1
 sed '/./!d'                           # 方法2
 # 只保留多個相鄰空行的第一行。並且刪除文件頂部和尾部的空行。
 # (模擬「cat -s」)
 sed '/./,/^$/!d'        #方法1,刪除文件頂部的空行,允許尾部保留一空行
 sed '/^$/N;/ $/D'      #方法2,允許頂部保留一空行,尾部不留空行
 # 只保留多個相鄰空行的前兩行。
 sed '/^$/N;/ $/N;//D'
 # 刪除文件頂部的所有空行
 sed '/./,$!d'
 # 刪除文件尾部的所有空行
 sed -e :a -e '/^ *$/{$d;N;ba' -e '}'  # 對所有sed有效
 sed -e :a -e '/^ *$/N;/ $/ba'        # 同上,但只對 gsed 3.02.*有效
 # 刪除每個段落的最後一行
 sed -n '/^$/{p;h;};/./{x;/./p;}'
特殊應用:
--------
 # 移除手冊頁(man page)中的nroff標記。在Unix System V或bash shell下使
 # 用'echo'命令時可能需要加上 -e 選項。
 sed "s/.`echo `//g"    # 外層的雙括號是必須的(Unix環境)
 sed 's/.^H//g'             # 在bash或tcsh中, 按 Ctrl-V 再按 Ctrl-H
 sed 's/.x08//g'           # sed 1.5,GNU sed,ssed所使用的十六進制的表示方法
 # 提取新聞組或 e-mail 的郵件頭
 sed '/^$/q'                # 刪除第一行空行後的所有內容
 # 提取新聞組或 e-mail 的正文部分
 sed '1,/^$/d'              # 刪除第一行空行之前的所有內容
 # 從郵件頭提取「Subject」(標題欄字段),並移除開頭的「Subject:」字樣
 sed '/^Subject: */!d; s///;q'
 # 從郵件頭獲得回覆地址
 sed '/^Reply-To:/q; /^From:/h; /./d;g;q'
 # 獲取郵件地址。在上一個腳本所產生的那一行郵件頭的基礎上進一步的將非電郵
 # 地址的部分剃除。(見上一腳本)
 sed 's/ *(.*)//; s/>.*//; s/.*[:<] *//'
 # 在每一行開頭加上一個尖括號和空格(引用信息)
 sed 's/^/> /'
 # 將每一行開頭處的尖括號和空格刪除(解除引用)
 sed 's/^> //'
 # 移除大部分的HTML標籤(包括跨行標籤)
 sed -e :a -e 's/<[^>]*>//g;/</N;//ba'
 # 將分成多卷的uuencode文件解碼。移除文件頭信息,只保留uuencode編碼部分。
 # 文件必須以特定順序傳給sed。下面第一種版本的腳本可以直接在命令行下輸入;
 # 第二種版本則可以放入一個帶執行權限的shell腳本中。(由Rahul Dhesi的一
 # 個腳本修改而來。)
 sed '/^end/,/^begin/d' file1 file2 ... fileX | uudecode   # vers. 1
 sed '/^end/,/^begin/d' "$@" | uudecode                    # vers. 2
 # 將文件中的段落以字母順序排序。段落間以(一行或多行)空行分隔。GNU sed使用
 # 字元「v」來表示垂直製表符,這裡用它來作為換行符的佔位符——當然你也可以
 # 用其他未在文件中使用的字符來代替它。
 sed '/./{H;d;};x;s/ /={NL}=/g' file | sort | sed '1s/={NL}=//;s/={NL}=/ /g'
 gsed '/./{H;d};x;y/ /v/' file | sort | sed '1s/v//;y/v/ /'
 # 分別壓縮每個.TXT文件,壓縮後刪除原來的文件並將壓縮後的.ZIP文件
 # 命名為與原來相同的名字(只是擴展名不同)。(DOS環境:「dir /b」
 # 顯示不帶路徑的文件名)。
 echo @echo off >zipup.bat
 dir /b *.txt | sed "s/^(.*).TXT/pkzip -mo 1 1.TXT/" >>zipup.bat
使用SED:Sed接受一個或多個編輯命令,並且每讀入一行後就依次應用這些命令。
當讀入第一行輸入後,sed對其應用所有的命令,然後將結果輸出。接著再讀入第二
行輸入,對其應用所有的命令……並重複這個過程。上一個例子中sed由標準輸入設
備(即命令解釋器,通常是以管道輸入的形式)獲得輸入。在命令行給出一個或多
個文件名作為參數時,這些文件取代標準輸入設備成為sed的輸入。sed的輸出將被
送到標準輸出(顯示器)。因此:
 cat filename | sed '10q'         # 使用管道輸入
 sed '10q' filename               # 同樣效果,但不使用管道輸入
 sed '10q' filename > newfile     # 將輸出轉移(重定向)到磁盤上
要瞭解sed命令的使用說明,包括如何通過腳本文件(而非從命令行)來使用這些命
令,請參閱《sed & awk》第二版,作者Dale Dougherty和Arnold Robbins
(O'Reilly,1997;http://www.ora.com),《UNIX Text Processing》,作者
Dale Dougherty和Tim O'Reilly(Hayden Books,1987)或者是Mike Arst寫的教
程——壓縮包的名稱是「U-SEDIT2.ZIP」(在許多站點上都找得到)。要發掘sed
的潛力,則必須對「正則表達式」有足夠的理解。正則表達式的資料可以看
《Mastering Regular Expressions》作者Jeffrey Friedl(O'reilly 1997)。
Unix系統所提供的手冊頁(「man」)也會有所幫助(試一下這些命令
「man sed」、「man regexp」,或者看「man ed」中關於正則表達式的部分),但
手冊提供的信息比較「抽象」——這也是它一直為人所詬病的。不過,它本來就不
是用來教初學者如何使用sed或正則表達式的教材,而只是為那些熟悉這些工具的人
提供的一些文本參考。
括號語法:前面的例子對sed命令基本上都使用單引號('...')而非雙引號
("...")這是因為sed通常是在Unix平台上使用。單引號下,Unix的shell(命令
解釋器)不會對美元符($)和後引號(`...`)進行解釋和執行。而在雙引號下
美元符會被展開為變量或參數的值,後引號中的命令被執行並以輸出的結果代替
後引號中的內容。而在「csh」及其衍生的shell中使用感嘆號(!)時需要在其前
面加上轉義用的反斜槓(就像這樣:!)以保證上面所使用的例子能正常運行
(包括使用單引號的情況下)。DOS版本的Sed則一律使用雙引號("...")而不是
引號來圈起命令。
'    '的用法:為了使本文保持行文簡潔,我們在腳本中使用'    '來表示一個製表
符。但是現在大部分版本的sed還不能識別'    '的簡寫方式,因此當在命令行中為
腳本輸入製表符時,你應該直接按TAB鍵來輸入製表符而不是輸入'    '。下列的工
具軟件都支持'    '做為一個正則表達式的字元來表示製表符:awk、perl、HHsed、
sedmod以及GNU sed v3.02.80。
不同版本的SED:不同的版本間的sed會有些不同之處,可以想像它們之間在語法上
會有差異。具體而言,它們中大部分不支持在編輯命令中間使用標籤(:name)或分
支命令(b,t),除非是放在那些的末尾。這篇文檔中我們儘量選用了可移植性較高
的語法,以使大多數版本的sed的用戶都能使用這些腳本。不過GNU版本的sed允許使
用更簡潔的語法。想像一下當讀者看到一個很長的命令時的心情:
   sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d
好消息是GNU sed能讓命令更緊湊:
   sed '/AAA/b;/BBB/b;/CCC/b;d'      # 甚至可以寫成
   sed '/AAA|BBB|CCC/b;d'
此外,請注意雖然許多版本的sed接受象「/one/ s/RE1/RE2/」這種在's'前帶有空
格的命令,但這些版本中有些卻不接受這樣的命令:「/one/! s/RE1/RE2/」。這時
只需要把中間的空格去掉就行了。
速度優化:當由於某種原因(比如輸入文件較大、處理器或硬盤較慢等)需要提高
命令執行速度時,可以考慮在替換命令(「s/.../.../」)前面加上地址表達式來
提高速度。舉例來說:
   sed 's/foo/bar/g' filename         # 標準替換命令
   sed '/foo/ s/foo/bar/g' filename   # 速度更快
   sed '/foo/ s//bar/g' filename      # 簡寫形式
當只需要顯示文件的前面的部分或需要刪除後面的內容時,可以在腳本中使用「q」
命令(退出命令)。在處理大的文件時,這會節省大量時間。因此:
   sed -n '45,50p' filename           # 顯示第45到50行
   sed -n '51q;45,50p' filename       # 一樣,但快得多
如果你有其他的單行腳本想與大家分享或者你發現了本文檔中錯誤的地方,請發電
子郵件給本文檔的作者(Eric Pement)。郵件中請記得提供你所使用的sed版本、
該sed所運行的操作系統及對問題的適當描述。本文所指的單行腳本指命令行的長
度在65個字符或65個以下的sed腳本〔譯註1〕。本文檔的各種腳本是由以下所列作
者所寫或提供:
 Al Aab                               # 建立了「seders」郵件列表
 Edgar Allen                          # 許多方面
 Yiorgos Adamopoulos                  # 許多方面
 Dale Dougherty                       # 《sed & awk》作者
 Carlos Duarte                        # 《do it with sed》作者
 Eric Pement                          # 本文檔的作者
 Ken Pizzini                          # GNU sed v3.02 的作者
 S.G. Ravenhall                       # 去html標籤腳本
 Greg Ubben                           # 有諸多貢獻並提供了許多幫助
-------------------------------------------------------------------------
譯註1:大部分情況下,sed腳本無論多長都能寫成單行的形式(通過`-e'選項和`;'
號)——只要命令解釋器支持,所以這裡說的單行腳本除了能寫成一行還對長度有
所限制。因為這些單行腳本的意義不在於它們是以單行的形式出現。而是讓用戶能
方便地在命令行中使用這些緊湊的腳本才是其意義所在。
(繼續閱讀...)
文章標籤

正義的胖虎 發表在 痞客邦 留言(0) 人氣(56,231)

  • 個人分類:
▲top
  • 10月 07 週二 200822:35
  • [轉貼] Linux C 程式設計

本篇出自:擁抱自由,使用 linux ! 


在 FourDollers Blog 看到他介紹 C/C++ Programming on Linux ,大致看了他所提供的資源覺得以下對我最有幫助。
Advanced Linux Programming
GNU Manuals Online
——–
Advanced Linux Programming
http://www.advancedlinuxprogramming.com/
有全文PDF下載
程式範例可線上瀏覽,也可以下載
Chapter 01 - Advanced Unix Programming with Linux
Chapter 02 - Writing Good GNU/Linux Software
大致瀏覽了前兩章覺得獲益良多,之前遇到的問題其實裡面都有教,自己在那邊苦惱好久~~~看來應該好好k這本書。
Chapter 03 - Processes
Chapter 04 - Threads
Chapter 05 - Interprocess Communication
Chapter 06 - Mastering Linux
Chapter 07 - The /proc File System
Chapter 08 - Linux System Calls
Chapter 09 - Inline Assembly Code
Chapter 10 - Security
Chapter 11 - A Sample GNU/Linux Application
Appendix A - Other Development Tools
Appendix B - Low Level I/O
Appendix C - Table of Signals
Appendix D - Online Resources
Appendix E - Open Publication License Version 1.0
Appendix F - The GNU General Public License
——–
GNU Manuals Online
http://www.gnu.org/manual/manual.html
所提供的文件都是可自由與免費取得
像 autoconf, automake, autogen, glibc, make…等文件,都是我常上去找資料的地方。
(繼續閱讀...)
文章標籤

正義的胖虎 發表在 痞客邦 留言(0) 人氣(10,042)

  • 個人分類:
▲top
  • 10月 07 週二 200822:29
  • [點解] 基本中的基本:印星星

本文出處: →教學成果←
在學校裡我上過的程式課只要上到迴圈,當次的作業一定就是印星星,用 * 排列成各種圖形。
在這種作業裡面就可以瞭解對迴圈的流程與控制的程度了。
(繼續閱讀...)
文章標籤

正義的胖虎 發表在 痞客邦 留言(0) 人氣(22,695)

  • 個人分類:
▲top
  • 10月 07 週二 200822:27
  • [轉貼] 使用Dev-C++設計GTK+程式

本篇出自:呢喃者物語




(繼續閱讀...)
文章標籤

正義的胖虎 發表在 痞客邦 留言(0) 人氣(5,576)

  • 個人分類:
▲top
  • 10月 07 週二 200822:21
  • [英文] Microsoft 給 Yahoo 的分手信

Mr. Jerry Yang
CEO and Chief Yahoo
Yahoo! Inc.
701 First Avenue
Sunnyvale, CA 94089
Dear Jerry:
After over three months, we have reached the conclusion of the process regarding a possible combination of Microsoft and Yahoo!.
I first want to convey my personal thanks to you, your management team, and Yahoo!』s Board of Directors for your consideration of our proposal. I appreciate the time and attention all of you have given to this matter, and I especially appreciate the time that you have invested personally. I feel that our discussions this week have been particularly useful, providing me for the first time with real clarity on what is and is not possible.
I am disappointed that Yahoo! has not moved towards accepting our offer. I first called you with our offer on January 31 because I believed that a combination of our two companies would have created real value for our respective shareholders and would have provided consumers, publishers, and advertisers with greater innovation and choice in the marketplace. Our decision to offer a 62 percent premium at that time reflected the strength of these convictions.
In our conversations this week, we conveyed our willingness to raise our offer to $33.00 per share, reflecting again our belief in this collective opportunity. This increase would have added approximately another $5 billion of value to your shareholders, compared to the current value of our initial offer. It also would have reflected a premium of over 70 percent compared to the price at which your stock closed on January 31. Yet it has proven insufficient, as your final position insisted on Microsoft paying yet another $5 billion or more, or at least another $4 per share above our $33.00 offer.
Also, after giving this week's conversations further thought, it is clear to me that it is not sensible for Microsoft to take our offer directly to your shareholders. This approach would necessarily involve a protracted proxy contest and eventually an exchange offer. Our discussions with you have led us to conclude that, in the interim, you would take steps that would make Yahoo! undesirable as an acquisition for Microsoft.
We regard with particular concern your apparent planning to respond to a 「hostile」 bid by pursuing a new arrangement that would involve or lead to the outsourcing to Google of key paid Internet search terms offered by Yahoo! today. In our view, such an arrangement with the dominant search provider would make an acquisition of Yahoo! undesirable to us for a number of reasons:
•First, it would fundamentally undermine Yahoo!』s own strategy and long-term viability by encouraging advertisers to use Google as opposed to your Panama paid search system. This would also fragment your search advertising and display advertising strategies and the ecosystem surrounding them. This would undermine the reliance on your display advertising business to fuel future growth.
•Given this, it would impair Yahoo's ability to retain the talented engineers working on advertising systems that are important to our interest in a combination of our companies.
•In addition, it would raise a host of regulatory and legal problems that no acquirer, including Microsoft, would want to inherit. Among other things, this would consolidate market share with the already-dominant paid search provider in a manner that would reduce competition and choice in the marketplace.
•This would also effectively enable Google to set the prices for key search terms on both their and your search platforms and, in the process, raise prices charged to advertisers on Yahoo. In addition to whatever resulting legal problems, this seems unwise from a business perspective unless in fact one simply wishes to use this as a vehicle to exit the paid search business in favor of Google.
•It could foreclose any chance of a combination with any other search provider that is not already relying on Google's search services.
Accordingly, your apparent plan to pursue such an arrangement in the event of a proxy contest or exchange offer leads me to the firm decision not to pursue such a path. Instead, I hereby formally withdraw Microsoft's proposal to acquire Yahoo!.
We will move forward and will continue to innovate and grow our business at Microsoft with the talented team we have in place and potentially through strategic transactions with other business partners.
I still believe even today that our offer remains the only alternative put forward that provides your stockholders full and fair value for their shares. By failing to reach an agreement with us, you and your stockholders have left significant value on the table.
But clearly a deal is not to be.
Thank you again for the time we have spent together discussing this.
Sincerely yours,
Steven A. Ballmer
Chief Executive Officer
Microsoft Corporation


(繼續閱讀...)
文章標籤

正義的胖虎 發表在 痞客邦 留言(0) 人氣(498)

  • 個人分類:
▲top
  • 10月 02 週四 200810:36
  • [轉貼] 工程師面對問題應有的態度

這是一個發生在美國通用汽車的客戶與該公司客服部門間的真實故事。
一天,美國通用汽車公司的龐帝雅克(Pontiac )部門收到一封客戶抱怨信,上面是這樣寫的:
這是我為了同一件事第二次寫信給你們,
我不怪你們沒有回信給我,
因為我也知道大家都會認為我瘋了,但這的確是一個事實。
我們家有一個傳統的習慣:就是在吃完晚餐後,都會以冰淇淋來當飯後甜點。
由於冰淇淋的口味很多,所以每天在飯後才投票決定要吃哪種口味,
等大家決定後,我就會開車去買。
但最近我買了一部新的龐帝雅克後,問題就發生了。
你們知道嗎?每當我買的冰淇淋是香草口味時,車子就發不動。
但如果買的是其他口味,車子發動就順得很。
儘管這個問題聽起來很豬頭,但我是非常認真的。
為什麼當我買了香草冰淇淋,這部龐帝雅克就會秀逗,
而我不管什麼時候買其他口味的冰淇淋,它就是一尾活龍?
為什麼?為什麼?
儘管龐帝雅克的總經理對這封信心存懷疑,但他還是派了一位工程師去查看究竟。
當工程師去找這位仁兄時,很驚訝的發現:這封信竟是出自於一位事業成功、樂觀、且受了高等教育的人。
工程師安排與這位仁兄的見面時間剛好是在用完晚餐後,
兩人於是一個箭步躍上車,往冰淇淋店開去。
那個晚上投票結果是香草口味,當買好冰淇淋回到車上後,車子又秀逗了。
這位工程師之後又來了三個晚上。
第一晚,巧克力冰淇淋,車子沒事。
第二晚,草莓冰淇淋,車子也沒事。
第三晚,香草冰淇淋,車子【秀逗】。
這位採取邏輯思考的工程師,當然是死不相信這位仁兄的車子對香草過敏。
因此,他繼續安排相同的行程,希望能解決這個問題。
工程師開始記下從頭到現在所發生的種種詳細資料,如時間、車子使用油的種類、車子開出及開回的時間等等,
根據資料顯示他有了一個結論::
這位仁兄買香草冰淇淋所花的時間比其他口味的要少。
為什麼呢?
原因是出在這家冰淇淋店的內部設置的問題。
因為,香草冰淇淋是最暢銷的口味,
店家為了讓顧客每次都能很快的拿取,所以將香草口味特別分開陳列在單獨的冰櫃,並將冰櫃放置在店的前端;
至於其他口味則放置在距離收銀檯較遠的後端。
現在,工程師所要知道的疑問是:為什麼這部車會因為從熄火到重新啟動的時間較短就會秀逗?
原因絕對不是香草冰淇淋的關係,
工程師很快地由心中浮現出答案,應該是『蒸氣鎖』。
因為當這位仁兄買其他口味時,由於時間較久,引擎有足夠的時間散熱,重新發動就沒有太大的問題。
但是買香草口味時,由於花的時間較短,引擎太熱以至於還無法讓蒸氣鎖有足夠的散熱時間。
有時候,即使某些問題看起來真是瘋狂,但它是真的存在;
如果我們每次在看待任何問題時,能秉持著冷靜的思考,去找尋解決的方法,這些問題將變得比較簡單,而不再那麼複雜或瘋狂。
當你碰到問題時,或當別人告訴你他的問題時,請不要直接就反應說:那是不可能的(IMPOSSIBLE ),而沒有投入一些真誠的努力。
仔細觀察【不可能 IMPOSSIBLE】這個字,
你也許可以看到【我是有可能的 I'M POSSIBLE】。
這個差別的關鍵就在於: 我們看待一件事情的態度及理解力。
(繼續閱讀...)
文章標籤

正義的胖虎 發表在 痞客邦 留言(0) 人氣(466)

  • 個人分類:
▲top
  • 5月 19 週一 200813:22
  • [點解] 開啟有root 權限的檔案總管

最近開始在使用ubuntu的桌面環境,有一點讓我很不習慣...
之前我摸過的Linux系統只有RedHat系列的Fedora跟CentOS
基本上我都習慣用root的權限來working
換到Ubuntu底下,
(繼續閱讀...)
文章標籤

正義的胖虎 發表在 痞客邦 留言(0) 人氣(5,795)

  • 個人分類:
▲top
  • 4月 14 週一 200818:37
  • [非技術] 備份Linux 系統


這兩個星期一直在忙著處理 各語系的Ubuntu for隨身碟 (連阿拉伯文版本都有@@)
做這個勢必要在電腦上安裝各語系版本的Ubuntu,所以我得用GHSOT來備份我的Ubuntu
以便日後要做修改時可以直接還原系統回去,而不要重裝系統。
之前我壓根的沒想過要用GHOST之類的去備份Linux底下的東西,
上上個星期5我裝好一台ubuntu後,試著用Ghost來備份,
實驗的結果是可行的,我將備份好的映像檔再倒回去是ok的
不過這也是種下苦果的因子。
就在我確定GHOST是可以直接備份Linux系統的狀況下,這兩個星期
我陸續完成 繁/簡中文 英、法、日、韓、西班牙  等語系的客製化Ubuntu for 開機隨身碟(俄、德、阿拉伯...製作中)
每天都得晚1.5~2.5個小時下班... ...(平常工作很少需要加班)
就在4/14 慘劇發生了...我想把前個星期做的日語版還原,修改一下設定。
沒想到還原後無法進入Ubuntu桌面...Orz
本來還以為這個檔的問題,拿硬碟底下其他已經完成的GHOST映像檔來試...
OH~MY GOD~要我命...全都不用,開另一台工作電腦也是有相同的情況...慘*N
(繼續閱讀...)
文章標籤

正義的胖虎 發表在 痞客邦 留言(0) 人氣(396)

  • 個人分類:
▲top
  • 4月 13 週日 200815:34
  • [宅] 我的電腦房升級紀錄



最近因工作需要,不得不多買一台主機 (口袋空空)
經過3個月的省吃撿用,終於存夠銀子了...
升級材料:
CPU: intel 8200
MB:   華碩P5K PRO
RAM: 威剛 DDR2-800 2G X2
HD:   S牌 500GB
VGA: 艾爾莎 7300GT
電源: 海韻S12 2代 430W
機殼: cooler master 690 
圖1:裝機畫面
這次新主機我還是裝XP,不過因晶片組(P35 +SATA光碟機)的關係,讓我的XP for SATA安裝片,不能用...
(讓我又得從舊主機上拆軟碟機跟IDE光碟機來用) 
 
圖2:
這次買的機殼(酷媽 690) 配置的方式很合我的胃口 ^Q^
下置電源、硬碟架、通風的面版、USB、音源插孔在上方 (對主機放桌下的user來說超方便的)
缺點:電源的按紐如果也做在上面會更好... 

圖3:雙螢幕計劃達成
從去年初就想用雙螢幕了,當時鎖定笨Q的 222WH,只可惜順發沒賣(我還不太習慣在網上買超過萬元的物品^^")
過了一年...總算狠下心來掏出銀子買了 華碩 222U (22吋) X2
↓一邊開WOW,一邊電視跟網頁~ 超爽的 

圖4:雙螢幕的WOW

圖5: 電腦房一隅

圖6: 電腦房一隅

(繼續閱讀...)
文章標籤

正義的胖虎 發表在 痞客邦 留言(0) 人氣(555)

  • 個人分類:
▲top
«1...262728»

請幫牠找個家

我的噗浪

小時鐘

推文按鈕

部落格文章搜尋

個人頭像

正義的胖虎
暱稱:
正義的胖虎
分類:
數位生活
好友:
累積中
地區:

參觀人氣

  • 本日人氣:
  • 累積人氣:

近期文章

  • [WP] 修正媒體庫無法編輯圖片的問題
  • [心得] 三分鐘建置WordPress in GCP
  • [心得] 建立Docker管理工具:Portainer
  • [教學] 十分鐘建置ShadowSocks in GCP
  • [心得] 啟用Apache Rewrite功能
  • [心得] CentOS 6.8 + Let's Encrypt SSL +Apache + WordPress 全紀錄
  • [心得] Python爬蟲教學2018-抓取三大法人買賣金額_加強版
  • [心得] Python爬蟲教學2018-抓取三大法人買賣金額
  • [心得] 將Jupyter執行畫面嵌入WordPress
  • [心得] Python爬蟲教學2018-抓取台銀牌告匯率

文章彙整

文章分類

  • 未分類文章 (1)

誰來我家