linux 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、1、2、...、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 選項,其可被更改為任意字符

---------------------
作者:source188
來源:CSDN
原文:https://blog.csdn.net/shudaqi2010/article/details/53001194
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM