linux中sed命令

sed基本用法:git

    sed: Stream Editor  行編輯器,同vi編輯器不同的是,vi編輯器是全屏編輯器。
正則表達式

sed:模式空間編輯器

    默認不編輯原文件,僅對模式空間中的數據作處理;然後,處理結束後,將模式空間打印至屏幕;
spa


sed [options] 'AddressCommand' file...ip

-n:靜默模式,不在默認顯示模式空間中的內容字符串

-i:直接修改原始文件string

-e SCRIPT -e SCRIPT:能夠同時執行多個腳本it

-f  /PATH/TO/SED_SCRIPT   io

    sed -f /path/to/scripts file
擴展

-r 表示使用擴展正則表達式

關於Address的說明:

  1. StartLine,EndLine     好比1,100  $:最後一行

  2. /RegExp/      /^root/

  3. /pattern1/,/pattern2/ 第一次被pattern1匹配到的行開始,至第一次被pattern2匹配到的行結束,這中間的全部行

  4. lineNumber:指定的行

  5. StartLine,+N   從startline開始,向後的N行。

關於Command的說明:

d: 刪除符合條件的行

p: 顯示符合條件的行

a \String :在指定的行後面追加新行,內容爲string

i \String :在指定的行前面添加新行,內容爲string

r FILE:將指定的文件的內容添加至符合條件的行處

w FILE : 將地址指定的範圍內的行另存爲指定的文件中

s/pattern/string/修飾符  :查找並替換,默認只替換每行中第一次被模式匹配到的字符串

加修飾符:  g:全局替換      i:忽略字符大小寫

其實  s///,s###,s@@@都是同樣的,    \(\) ,\1,\2

&:引用模式匹配整個串。

練習:

  1. 刪除/etc/grub.conf文件中行首的空白符

    sed -r     's/^[[:space:]]+//g' /etc/grub.conf

  2. 替換/etc/inittab文件中「id:3:initdefault:」一行中的數字爲5

    sed -r   's#^\(id:\):[[:digit:]]\(:initdefault:\)#\15\2#g'

  3. 刪除/etc/inittab文件中的空白行

    sed -r  '/^$/d' /etc/inittab

  4. 刪除/etc/inittab文件中開頭的#號

    sed -r 's/^#//g' /etc/inittab

  5. 刪除某文件(/etc/inittab)中開頭的#號及後面的空白字符,但要求#號後面必須有空白字符

    sed -r 's/^#[[:space:]]+//g' /etc/inittab

  6. 取出一個文件路徑的目錄名稱

    sed -r 's@^(/.*/)[^/]+/?@\1@g'

  7. 取出一個文件路徑的文件名稱

    sed -r 's@^/.*/([^/]+)/?@\1@g'

相關文章
相關標籤/搜索