中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Shell sed使用心得是什么

發布時間:2021-11-08 18:36:35 來源:億速云 閱讀:109 作者:柒染 欄目:建站服務器

今天就跟大家聊聊有關Shell sed使用心得是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

sed 是一種UNIX/LINUX 平臺下的輕量級流編輯器,日常一般用于處理文本文件。sed 有許多很好的特性。首先,它相當小巧;其次, sed 可以配合強大的 shell 完成許多復雜的功能。在我看來,sed完全可以看成一個腳本解釋器,用類似于編程的手段完成許多事情。

sed簡單示例

sed命令的格式是
sed [-options] [command] [stdin]
比如這個例子
$ sed –e ‘d’ ./Mydir/Myfile
執行該命令,將得不到任何輸出。在該例中,用一個編輯命令 'd' 調用 sed;sed 打開 ./Mydir/Myfile 將一行讀入其模式緩沖區,執行’d’(“刪除行”);然后打印模式緩沖區(緩沖區已為空);它對后面的每一行重復這些步驟,這不會產生輸出!
對 這個命令要說明的幾點是:首先,它根本沒有修改 ./Mydir/Myfile。這是因為 sed 是流處理器,它只讀取在命令行指定的文件,它不試圖修改該文件。其次, sed 是面向行的,'d' 命令不是簡單地告訴 sed 一下子刪除所有輸入數據;相反,sed 逐行將 ./Mydir/Myfile 的每一行讀入其稱為模式緩沖區的內部緩沖區,一旦將一行讀入模式緩沖區,它就執行 'd' 命令,然后打印模式緩沖區的內容。最后要注意的事是括起 'd' 命令的單引號的用法,這樣可以禁用 shell 擴展。

指定sed的作用范圍

看下面的三個例子
$ sed –e ‘1d’ ./Mydir/Myfile
$ sed –e ‘1,10d’ ./Mydir/Myfile
$ sed –e ‘/begin/,/end/p’ ./Mydir/Myfile
第一個例子說明只刪除./Mydir/Myfile第一行的緩沖,第二個例子將刪除第1~10行的緩沖。第三個例子最復雜,它定義了以字符串’begin’開始到’end’結束的作用范圍

sed中的正則表達式

sed支持正則表達式,比如
$ sed –n -e ‘/regexp/p’ ./Mydir/Myfile
比如要刪除所有的空行
$ sed –e ‘/^$/d’ ./Mydir/Myfile
sed中的一些特殊定義是
   規則 表達式    描述
   /./       將與包含至少一個字符的任何行匹配
   /../      將與包含至少兩個字符的任何行匹配
   /^#/      將與以 '#' 開始的任何行匹配
   /^$/      將與所有空行匹配
   /}^/      將與以 '}'(無空格)結束的任何行匹配
   /} *^/    將與以 '}' 后面跟有 零或多個空格結束的任何行匹配
   /[abc]/   將與包含小寫 'a'、'b' 或 'c' 的任何行匹配
   /^[abc]/  將與以 'a'、'b' 或 'c' 開始的任何行匹配

再比如一個經典的例子,打印c源代碼中的main函數內容,其命令可以寫成如下
$ sed –n –e ‘/main[[:space]]*(/,/^}/p’ ./Mydir/*.c
其中[:space]表示空格,[[:space]]*表示有0~多個空格,所以main[[:space]]*(的意思是匹配“main (”字符串;“^}”表示這一行有且只有一個字符}。當然,上面的命令不是十分嚴謹。

sed –e ‘s/regexp/repalcement’ file

替換是sed命令中最常用的命令,比如如下的例子
$ sed –e ‘s/a/b’ ./Mydir/Myfile
$ sed –e ‘s/a/b/g’ ./Mydir/Myfile
第一個命令將./Mydir/Myfile中每一行第一次出現的字符a替換成字符b;第二個命令由于加入了’/g’,表示是全局(全部)替換字符a成字符b。

經常還可以看見如下兩種形式的sed
$ sed –e ‘1,10s/a/b’ ./Mydir/Myfile
$ sed –e ‘/^$/,/^END/s/a/b/g’ ./Mydir/Myfile
第一個命令是指替換1~10行;第二個命令是指全局替換從空行開始到以END開始的行中的內容。

替換命令不一定非要以/分隔,比如
$ sed –e ‘s:usr/local:/usr:g’ ./Mydir/Myfile
就是將./Mydir/Myfile中的usr/local全部替換成/usr

要用好替換命令,當然要使用正則表達式,除了上面所說的表達式的例子,還有一些是非常有用的
   字符類   描述
   [:alnum:]  字母數字 [a-z A-Z 0-9]
   [:alpha:]  字母 [a-z A-Z]
   [:blank:]  空格或制表鍵
   [:cntrl:]  任何控制字符
   [:digit:]  數字 [0-9]
   [:graph:]  任何可視字符(無空格)
   [:lower:]  小寫 [a-z]
   [:print:]  非控制字符
   [:punct:]  標點字符
   [:space:]  空格
   [:upper:]  大寫 [A-Z]
   [:xdigit:]  十六進制數字 [0-9 a-f A-F]

比如下面這個例子
$ sed –e ‘s/<[^>]*>//g’ ./Mydir/Myfile
< [^>]*>匹配<…>這樣的字符串(…中不含>)。運行這個命令,能夠將 “<b>This</b> is what <b>I</b> meant.”這樣的字符串替換成“This is what I meant.”

考察如下的命令
$ sed -e 's/.*/# &/' ./Mydir/Myfile
這個命令將所有的非空行以“#”注釋掉——&告訴sed在行首插入字符。

‘s///’允許我們在規則表達式中定義區域,然后可以在替換字符串中引用這些特定區域。這些區域是以(和)隔開的。
比如定義三個匹配非空字符的區域'(.*) (.*) (.*)',現在可以定義這三個區域的動作,比如
$ sed -e 's/(.*) (.*) (.*)/PreFix 1-2 Fix 3/' ./Mydir/Myfile
假如把三個區域分別命名為a、b、c,則最后結果是 PreFix a-b Fix c

sed中組合命令

sed中的命令可以組合,以;號隔開,比如
$ sed –n –e ‘=;p’ ./Mydir/Myfile
=表示打印行號,p表示打印。對于更復雜的指令,則可以寫成命令腳本,然后用-f選項導入,比如
$ sed –n –f MyScript.sed ./Mydir/Myfile
對于同一個地址上的操作,則可以用{}組合,比如
$ sed –n ‘1,20{ s/samba/Samba/g  s/posix/POSIX/g }’ ./Mydir/Myfile

sed中的行附加命令

在當前行之前插入行“i”,如果要插入多行,則將多行用分隔
在當前行之后插入行“a”,用法和上面相似
更改當前行“c”

看完上述內容,你們對Shell sed使用心得是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昌乐县| 尤溪县| 丹阳市| 嘉善县| 建德市| 长治市| 城口县| 黑山县| 西安市| 莱州市| 迁西县| 个旧市| 乌兰浩特市| 宣恩县| 呈贡县| 河津市| 龙门县| 谢通门县| 个旧市| 会宁县| 沿河| 泽州县| 历史| 搜索| 松潘县| 太白县| 浦北县| 蕲春县| 鹿邑县| 平阴县| 丰原市| 芦山县| 阿拉善左旗| 苏州市| 大新县| 西乌珠穆沁旗| 乌拉特前旗| 神木县| 澄迈县| 凤台县| 阳高县|