Linux ed命令

Linux ed命令是文本編輯器,用於文本編輯。linux

ed是Linux中功能最簡單的文本編輯程序,一次僅能編輯一行而非全屏幕方式的操做。git

ed命令並非一個經常使用的命令,通常使用比較多的是vi 指令。但ed文本編輯器對於編輯大文件或對於在shell腳本程序中進行文本編輯頗有用。正則表達式

語法

ed [-][-Gs][-p<字符串>][--help][--version][文件]

參數shell

  • -G或--traditional 提供回兼容的功能。
  • -p<字符串> 指定ed在command mode的提示字符。
  • -s,-,--quiet或--silent 不執行開啓文件時的檢查功能。
  • --help 顯示幫助。
  • --version 顯示版本信息。

實例

如下是一個 Linux ed 完整實例解析:vim

$ ed              <- 激活 ed 命令 
a                 <- 告訴 ed 我要編輯新文件 
My name is Titan. <- 輸入第一行內容 
And I love Perl very much. <- 輸入第二行內容 
.                 <- 返回 ed 的命令行狀態 
i                 <- 告訴 ed 我要在最後一行以前插入內容 
I am 24.          <- 將「I am 24.」插入「My name is Titan.」和「And I love Perl very much.」之間 
.                 <- 返回 ed 的命令行狀態 
c                 <- 告訴 ed 我要替換最後一行輸入內容 
I am 24 years old. <- 將「I am 24.」替換成「I am 24 years old.」(注意:這裏替換的是最後輸的內容) 
.                 <- 返回 ed 的命令行狀態 
w readme.text     <- 將文件命名爲「readme.text」並保存(注意:若是是編輯已經存在的文件,只須要敲入 w 便可) 
q                 <- 徹底退出 ed 編輯器

這是文件的內容是:緩存

$ cat readme.text 
My name is Titan. 
I am 24 years old. 
And I love Perl vrey much.

ed 命令簡介框架

ed 命令簡介:

在 unix/linux 平臺下,首先要學習的就是文本編輯,而 ed 編輯器是 unix/linux 操做系統下最簡單、最典型
的文本編輯器,所以,學習 ed 編輯器可以幫助你很好的理解通常的文本操做,並且還能夠爲你之後學習 unix/linux
下的一些經常使用命令(如 grep,sed,...)打下基礎。 

ed 編輯器是以行爲單位對文本進行操做的編輯器,也就是說一次僅能編輯一行,非以全屏的方式來操做,而不像 vi/vim
那樣是以整個屏幕框架爲單位對文本進行編輯。ed 簡單、易用,也正是因爲其小巧玲瓏,許多文本操做者如今仍然偏心它,
使用它。

ed 編輯器能夠用於建立、修改、顯示文本文件。當 ed 打開一文本文件時,將複製文件的內容到 ed 命令的緩存中, 在
ed 中的全部命令操做只做用於緩存中的內容,而不會對源文件有任何影響,除非對源文件進行 w(寫) 操做。 ed 有命令模式
和輸入模式兩種狀態,相似於 vi/vim 的兩種模式,ed 在命令模式下輸入的是命令,這些命令用來指定對編輯文本的操做;
ed 在輸入模式下輸入的是文本,這些文本將依照命令模式下輸入的命令被添加或替換到文本中。當第一次被調用時,ed 默
認進入命令模式,當輸入 a、c 或 i 命令後即進入輸入模式,在輸入模式下,單行輸入 '.' 而後回車,則回到命令模式。


ed 調用:

ed [-GVhl] [-p string] [file]

註解:
file                指定將要編輯的文件(若是文件名以歎號開頭 '!file',應用反斜槓引用歎號 '\!file',不然,ed 將視 file 
                命令的輸出爲編輯內容。)
-G                兼容模式
-V                輸出 ed 版本信息                
-h                顯示 ed 幫助信息
-l                強制退出狀態爲 0(即便操做中出現錯誤)
-p string         指定命令模式下的提示符


ed 命令格式爲:

[address [,address]]command[parameters]

地址(address,[,address]) 是用來指定命令(command)的做用範圍的。若是沒給出地址,則爲默認地址。ed 讀入文件後,當前
行默認爲文件最後一行,若是文件爲空,則當前行號設置爲 0。

命令(command) 會根據指定的地址(或默認地址)對編輯文本進行操做。當輸入一非法命令,ed 將會顯示一問號 '?' 來提示
輸入命令錯誤。


ed 地址:

地址由下面基本的元素構成,其後也可跟加 '+'、'-'、' ' 和數字來表示本身所須要的地址。

.             當前行

$             文本最後一行

n             文本第 n 行( n 爲數字,下同;m 亦是 )

-n             從文本當前行數起,向前第 n 行

+n             從文本當前行數起,向後第 n 行

-             至關於 -1 行地址

+             至關於 +1 行地址

m,n             文本的第 m 到 n 行

,             文本的全部行

;             文本當前行到最後一行

/reg/             從文本當前行數起,下一個匹配 reg 的行

?reg?             從文本當前行數起,上一個匹配 reg 的行

'x             由 k 命令標記的行( x 爲一小寫字母 )


正則表達式以下:(只涉及 ed 所支持的正則表達式)

.                   匹配任何單個字符。

[char-class]           匹配任何一個在 char-class 裏的單個字符。若是中間出現 '-' ,則意爲其左邊的字符和其右邊的
                   字符之間的全部字符。例如,[abc] 匹配 a 或 b 或 c;[a-z] 匹配任意一個小寫字母(a、b、c、
                    ...、z),[0-9] 匹配任意一個數字(0、一、二、...、9)。
                    char-class 也能夠爲一些字符集。以下:
                   [:alpha:] 至關於 [a-zA-Z]
                   [:lower:] 至關於 [a-z]
                   [:upper:] 至關於 [A-Z]
                   [:digit:] 至關於 [0-9]
                   [:alnum:] 至關於 [a-zA-Z0-9]
                   [:blank:] 匹配 ' '(空格)、 '\t'(製表符)
                   [:space:] 匹配 ' '(空格)、'\t'(製表符)、'\n'(新行)、'\f'()、'\v'(垂直製表符)、'\r'(回車符)
                   [:cntrl:] 匹配控制字符。在 ASCII 碼中,這些控制字符是從八進制數字 000 到 037, 和 177 (DEL) 
                   [:print:] 匹配 至關於 [:alnum:]、[:punct:] 和 空格
                   [:graph:] 匹配 至關於 [:alnum:] 、 [:punct:]
                   [:punct:] 匹配 `! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ ' 等標點符號
                   [:xdigit:] 匹配十六進制字符 '0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f'

[^char-class]            匹配 [char-class] 的補集,即匹配任意一個不在 char-class 裏的單個字符

*                    匹配前面的子表達式零次或屢次。例如,'ab*' 能匹配 "a" 以及 "abb"。 * 等價於'\{0,\}'

\+                   匹配前面的子表達式一次或屢次。例如,'ab\+' 能匹配 "ab" 以及 "abb",但不能匹配 "a"。\+ 等
                   價於 \{1,\}

\?                   匹配前面的子表達式零次或一次。例如,"word(s)\?" 能夠匹配 "word" 或 "words" 。\? 等價於
                     \{0,1\}

\{n,m\}           m 和 n 均爲非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。 "a{1,3}" 將匹配 "baaaaab" 
                   中的前三個 a。'a{0,1}' 等價於 'a\?'。請注意在逗號和兩個數之間不能有空格

\{n,\}                   n 是一個非負整數。至少匹配n 次。例如,'a\{2,\}' 不能匹配 "abc" 中的 'a',但能匹配 
                  "baaaaab"中的全部 a。'a\{1,\}' 等價於 'a\+'。'a\{0,\}' 則等價於 'a*'

\{n\}                   n 是一個非負整數。匹配肯定的 n 次。例如,'a\{2\}' 不能匹配 "bab" 中的 'a',可是能匹配 
                   "baab"中的兩個 a

^                   匹配輸入字符串的開始位置

$                   匹配輸入字符串的結束位置

\<                   匹配一個單詞的前邊界。例如,'\<el' 匹配 "element",但不能匹配 "help"

\>                   匹配一個單詞的後邊界。例如,'ly\>' 匹配 "lovely",但不匹配 "lying"

\b                   匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 能夠匹配"never" 中的 'er',
                   但不能匹配"verb" 中的 'er'

\B                   匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'

\w                   匹配任何非單詞字符。等價於 '[^A-Za-z0-9_]'

\W                   匹配任何非單詞字符。等價於 '[^A-Za-z0-9_]'

\`                   匹配一個句子的邊界

\(\)                   定義向後引用。'\n'(n爲一正整數)表明第 n 個括號中匹配的字符串


ed 命令:
ed 命令都是單個字符,其中一些命令有一些選項。若是一命令超過一行,應使 '\' 結束每一行。
命令以下:(括號內爲默認地址)

(.)a            切換到輸入模式,將新輸入的文本追加到指定行的後面,當前行被設爲輸入文本的最後一行

(.)i            切換到輸入模式,將新輸入的文本插入到指定行的前面,當前行被設爲輸入文本的最後一行

(.,.)c          切換到輸入模式,將新輸入的文本替換成指定行,當前行被設爲輸入文本的最後一行

(.,.)d          刪除指定行,若是被刪除的文本後還有文本行,則當前行被設爲該行,不然設爲被刪除的文本的
                上一行

(.+1)          無命令時,默認 p 命令,但打印下一行內容,當前行被設爲打印行

(.+1)zn        一次跳動 n 行,若是未指出 n ,默認當前終端屏幕大小,當前行被設爲最後被打印的行

(.,.)p         打印指定行,當前行被設爲打印行的最後一行

P               ed 命令模式下提示符開關命令,默認提示符爲 '*'

(.,.)l          在每行最後加一 '$' 符號指定結尾,並打印輸出

(.,.)n         打印指定行號和內容,行號與行內容用製表符分割,當前行被設爲打印行的最後一行

($)=           打印指定行行號

(.,.)#         註釋行,將被忽略

(.)k char      用一小寫字母標記指定行

(.,.)s/reg/replacement/
(.,.)s/reg/replacement/g
(.,.)s/reg/replacement/n
                              替換指定行命令

(.,.)s                   重複上一次替換命令,當前行被設爲最後一個被改變的行

(1,$)g/reg/cmd-list     全部匹配 '/reg/' 的行執行 cmd-list 命令,在命令執行前,當前行被設爲匹配行。當全部匹配
                         行執行完命令後,當前行被設定爲最後一個匹配行。cmd-list 中每一行只能有一個命令,但有多
                         個命令時,應以 '\' 結束每一行

(1,$)G/reg/              與 g/reg/cmd-list 類似,但匹配的每一行所執行的命令由用戶各個定義。

(1,$)v/reg/cmd-list      與 g/reg/cmd-list 相反,指不匹配行

(1,$)V/reg/              與 G/reg/ 相反,指不匹配行

(.,.+1)j                          合併指定行內容,當前行被設爲合併行

(.,.)m(.)                移動左邊源指定行到右邊目的指定行後,當前行被設爲移動行的最後一行

(.,.)t(.)                 複製左邊源指定行到右邊目的指定行後,當前行被設爲複製行的最後一行

(.,.)y                   複製指定行到緩存,當前行不改變

(.)x                     複製緩存內容到指定行後,當前行被設爲複製行的最後一行

u                        撤銷上一次命令,當前地址被設爲上一次地址

h                        打印最後一個錯誤說明

H                        錯誤說明開關,默認不輸出

e file                    編輯文件並設定文件名

E file                    強制編輯文件,同 e file,但丟失之前的修改,不作警告

!cmd                    執行 shell 命令 cmd

e !cmd                  先將ed 緩衝區清除,替換 cmd 命令的輸出

f file                    設置文件名,若是每給出 file 參數,則打印文件名

($)r file                 把指定文件內容追加到指定行後,當前行被設爲追加文本的最後一行

($)r !cmd               把命令的輸出追加到指定行後,當前行被設爲追加文本的最後一行

(1,$)w file               保存指定文本內容到指定文件(覆蓋保存)

(1,$)W file              保存指定文本內容到指定文件(追加保存),當前行不改變

(1,$)w !cmd            輸出指定文本內容到 cmd 的標準輸入,當前行不改變

(1,$)wq flie             保存指定文本內容到指定文件(覆蓋保存),並退出編輯器

q                  退出 ed 編輯器,退出前若所做的修改沒保存,發出警告

Q                  強制退出 ed 編輯器,同 q 命令,但退出前若所做的修改沒保存,不警告

P                  ed 命令提示符顯示開關。 '*' 爲 ed 默認提示符,利用 ed 命令 -p 選項,其可被更改成任意字符

更爲詳細之處請參閱 man info 手冊
相關文章
相關標籤/搜索