前面我們簡單介紹了一個Unix sed及Unix sed的工作機制,現在我們來講講Unix sed實用:如何向文件中增加一行的功能,sed 是unix中最重要的編輯器之一,注意,有之一..支持多種編輯任務,本文將實現題目的功能實例.
假定我們有一額文本文件,叫做empFile,包含了員工名字和員工id,如下:
- Hilesh, 1001
- Bharti, 1002
- Aparna, 1003
- Harshal, 1004
- Keyur, 1005
1.如何通過sed給文件添加標題行-“Employee, EmpId”
- $ sed ‘1i Employee, EmpId’ empFile
- Employee, EmpId
- Hilesh, 1001
- Bharti, 1002
- Aparna, 1003
- Harshal, 1004
- Keyur, 1005
解釋:數字1,是說只對第一行執行操作,i代表在insert(熟悉vim的同學應該知道,i會在當前字符的前面插入,a是在后面插入),因此,1i就表示在將Employee,EmpId插入到第一行之前.
然后,有了標題行的文件僅僅會輸出到標準輸出,源文件內容并不會改變,如果需要更新源文件,可以使用重定向輸出到一個臨時文件,然后移動到原始文件,如果Unix系統的sed是GUN版本的,sed會有一個-i選項,可以直接實現更新源文件,如何查看版本,終端下輸入sed —version即可看到,下面先執行,再查看文件,發現已經多了標題行了.
- $ sed -i ‘1i Employee, EmpId’ empFile
- $ cat empFile
- Employee, EmpId
- Hilesh, 1001
- Bharti, 1002
- Aparna, 1003
- Harshal, 1004
- Keyur, 1005
2.如何在標題行之后,也就是原始第一行之前添加一行橫線—“——-”
- $ sed -i ‘1a ———————-‘ empFile
- $ cat empFile
- Employee, EmpId
- Hilesh, 1001
- Bharti, 1002
- Aparna, 1003
- Harshal, 1004
- Keyur, 1005
同1,中,1表示第一行,a表示append(附加),也就是說當讀入第一行的時候在其之后添加一行,如果你使用2i作為命令也是正確的,就是指當讀入第二行的時候,在其之前插入一行.
3.如何在文件尾部添加一行
- $ sed -i ‘$a ———————-‘ empFile
- $ cat empFile
- Employee, EmpId
- Hilesh, 1001
- Bharti, 1002
- Aparna, 1003
- Harshal, 1004
- Keyur, 1005
- ———————-
為了在文件尾部插入一行,如果使用之前的方法就需要知道總共有多少行,而$符號則直接指明了最后一行,因此$a表示在讀入最后一行的時候,在后面插入一行.
4.如何在指定的記錄之后插入一條新紀錄,假定我們的例子文件的內容現在是:
- Employee, EmpId
- Hilesh, 1001
- Harshal, 1004
- Keyur, 1005
- ———————-
如果我想在Hilesh這個員工之后插入Bharti員工的信息,我這樣做:
- $ sed -i ‘/Hilesh/a Bharti, 1002’ empFile
- $ cat empFile
- Employee, EmpId
- Hilesh, 1001
- Bharti, 1002
- Harshal, 1004
- Keyur, 1005
- ———————-
注意看,我們這里已經不再使用數字或者其他表示行號的標識了,我們使用了一個模式,了解過正則表達式的朋友會比較熟悉,可以理解為某種規則- /Hilesh/a 這個命令表示對于每一行讀入的內容,如果發現 /Hilesh/這個匹配,在該行之后插入一行,也就是說如果文件里有兩行都是Hilesh員工,那么執行完上面的命令,將會附加兩行內容,這里可以想想sed的工作模式,對每一行執行命令條件檢測,發現匹配,就執行.
5.如何在指定記錄之前插入記錄呢,比如,我想在Harshal這條記錄之前插入Aparna記錄呢?
- $ sed -i ‘/Harshal/i Aparna, 1003’ empFile
- $ cat empFile
- Employee, EmpId
- //Vevb.com
- Hilesh, 1001
- Bharti, 1002
- Aparna, 1003
- Harshal, 1004
- Keyur, 1005
- ———————-
新聞熱點
疑難解答