Linux sed命令詳細說明
Linux sed命令詳細說明
sed是一種用於過濾和轉換文字的流編輯器。用於對輸入流(檔案或來自管道的輸入)執行基本文字轉換。
雖然sed在某些方面類似於允許指令碼編輯(如ed)的編輯器,但它的工作方式是隻傳遞一次輸入,因此效率更高。
參考:https://blog.csdn.net/hdyebd/article/details/83617292
思考:
檢視當前伺服器IP
[root@cjcos01 cjc]# ifconfig
通過ifconfig雖然可以檢視IP,但是列印出很多並不關注的資訊,如何去掉這部分無用的資訊?
可以通過sed加grep實現,方法見後面的示例。
測試資料
[root@cjcos01 cjc]# cat t1.txt
tao花庵歌 tao花塢裡tao花庵,tao花庵下tao花仙; tao花仙人種tao樹,又摘tao花賣酒錢。 酒醒只在花前坐,酒醉還來花下眠; 半醒半醉日復日,花落花開年復年。 但願老死花酒間,不願鞠躬車馬前; 車塵馬足富者趣,酒盞花枝貧者緣。 若將富貴比貧賤,一在平地一在天; 若將貧賤比車馬,他得驅馳我得閒。 別人笑我太瘋癲,我笑他人看不穿; 不見五陵豪傑墓,無花無酒鋤作田。
1 列印行
列印第二行
[root@cjcos01 cjc]# sed -n '2p' /cjc/t1.txt
tao花塢裡tao花庵,tao花庵下tao花仙;
列印第2-5行
[root@cjcos01 cjc]# sed -n '2,5p' /cjc/t1.txt
tao花塢裡tao花庵,tao花庵下tao花仙; tao花仙人種tao樹,又摘tao花賣酒錢。 酒醒只在花前坐,酒醉還來花下眠; 半醒半醉日復日,花落花開年復年。
列印第10行到結尾行
[root@cjcos01 cjc]# sed -n '10,$p' /cjc/t1.txt
別人笑我太瘋癲,我笑他人看不穿; 不見五陵豪傑墓,無花無酒鋤作田。
列印第2行,第6行,第8,9,10行
[root@cjcos01 cjc]# sed -n '2p;6p;8,10p' /cjc/t1.txt
tao花塢裡tao花庵,tao花庵下tao花仙; 但願老死花酒間,不願鞠躬車馬前; 若將富貴比貧賤,一在平地一在天; 若將貧賤比車馬,他得驅馳我得閒。 別人笑我太瘋癲,我笑他人看不穿;
列印含有tao字的行
[root@cjcos01 cjc]# sed -n '/tao/p' /cjc/t1.txt
tao花庵歌 tao花塢裡tao花庵,tao花庵下tao花仙; tao花仙人種tao樹,又摘tao花賣酒錢。
列印"酒"字開頭的行
[root@cjcos01 cjc]# sed -n '/^酒/p' /cjc/t1.txt
酒醒只在花前坐,酒醉還來花下眠;
列印"。"結尾的行
[root@cjcos01 cjc]# sed -n '/\。$/p' /cjc/t1.txt
tao花仙人種tao樹,又摘tao花賣酒錢。 半醒半醉日復日,花落花開年復年。 車塵馬足富者趣,酒盞花枝貧者緣。 若將貧賤比車馬,他得驅馳我得閒。 不見五陵豪傑墓,無花無酒鋤作田。
2 插入行
[root@cjcos01 cjc]# cp t1.txt t1.txt.bak
人為多愁少年老, 花為無愁老少年。 年老少年都不管,且將詩酒醉花前。
行前新增,寫入原始檔
[root@cjcos01 cjc]# sed -i '2i 人為多愁少年老,花為無愁老少年。' /cjc/t1.txt
[root@cjcos01 cjc]# cat t1.txt
tao花庵歌 人為多愁少年老,花為無愁老少年。 tao花塢裡tao花庵,tao花庵下tao花仙; ......
行後新增(直接修改原檔案)
[root@cjcos01 cjc]# sed -i '2a 年老少年都不管,且將詩酒醉花前。' /cjc/t1.txt
[root@cjcos01 cjc]# cat t1.txt
tao花庵歌 人為多愁少年老,花為無愁老少年。 年老少年都不管,且將詩酒醉花前。 tao花塢裡tao花庵,tao花庵下tao花仙; ......
3 替換行(直接修改原檔案)
[root@cjcos01 cjc]# sed -i '2c 閒來寫就青山賣,不使人間造孽錢。' /cjc/t1.txt
[root@cjcos01 cjc]# cat t1.txt
tao花庵歌 閒來寫就青山賣,不使人間造孽錢。 年老少年都不管,且將詩酒醉花前。 ......
4 替換字元
-n 's/old/new/p' 將檔案中每行的第一個old字元換成new字元,列印出只發生變化的行,且原始檔內容不變
[root@cjcos01 cjc]# sed -n 's/tao/荷/p' /cjc/t1.txt
荷花庵歌 荷花塢裡tao花庵,tao花庵下tao花仙; 荷花仙人種tao樹,又摘tao花賣酒錢。
-n 's/old/new/pg':將檔案中全部的old字元換成new字元,列印出只發生變化的行,且原始檔內容不變。
[root@cjcos01 cjc]# sed -n 's/tao/荷/pg' /cjc/t1.txt
荷花庵歌 荷花塢裡荷花庵,荷花庵下荷花仙; 荷花仙人種荷樹,又摘荷花賣酒錢。
-n 's/old/new/p3g' :將檔案中每行從第3個old字元開始換成new字元,列印出只發生變化的行,且原始檔內容不變
[root@cjcos01 cjc]# sed -n 's/tao/荷/p3g' /cjc/t1.txt
tao花塢裡tao花庵,荷花庵下荷花仙; tao花仙人種tao樹,又摘荷花賣酒錢。
-i,將檔案中每行的第一個old字元換成new字元,修改原始檔內容
[root@cjcos01 cjc]# sed -i 's/tao/荷/g' /cjc/t1.txt
[root@cjcos01 cjc]# sed -i 's/荷/tao/g' /cjc/t1.txt
5 刪除行
刪除第2行
[root@cjcos01 cjc]# sed -i '2d' /cjc/t1.txt
刪除第3到5行
[root@cjcos01 cjc]# sed -i '3,5d' /cjc/t1.txt
刪除第2行,第4,5,6行
[root@cjcos01 cjc]# sed -i '2d;4,6d' /cjc/t1.txt
舉例:
例1: 只顯示ifconfig中的IP地址
[root@cjcos01 ~]# ifconfig |grep "inet"|grep -v "inet6"|grep -v "127.0.0.1"|grep -v "122.1"|sed 's/netmask.*//'|sed 's/^.*inet//' 192.168.38.10
例2:去掉ssh配置檔案中的帶#行和空行,不修改原始檔,將結果列印到前臺
[root@cjcos01 cjc]# echo >t1.txt
[root@cjcos01 cjc]# cat /etc/ssh/ssh_config > t1.txt
[root@cjcos01 cjc]# sed 's/#.*//g' /cjc/t1.txt |sed '/^$/d'
Host * GSSAPIAuthentication yes ForwardX11Trusted yes SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE SendEnv XMODIFIERS
例3:每一行結尾為.的換成!("."需要加轉義符),不改變原始檔(指定-i會改變原始檔)
[root@cjcos01 cjc]# sed -n 's/\.$/!/p' /cjc/t1.txt
GSSAPIAuthentication yes! ForwardX11Trusted yes! SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT!
例4:以H開頭的行末尾加上@@@
[root@cjcos01 cjc]# sed -n 's/^H.*$/&@@@/p' /cjc/t1.txt
Host *@@@
sed幫助資訊:
[root@cjcos01 ~]# sed --help Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]... -n, --quiet, --silent suppress automatic printing of pattern space -e script, --expression=script add the script to the commands to be executed -f script-file, --file=script-file add the contents of script-file to the commands to be executed --follow-symlinks follow symlinks when processing in place -i[SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if SUFFIX supplied) -c, --copy use copy instead of rename when shuffling files in -i mode -b, --binary does nothing; for compatibility with WIN32/CYGWIN/MSDOS/EMX ( open files in binary mode (CR+LFs are not treated specially)) -l N, --line-length=N specify the desired line-wrap length for the `l' command --posix disable all GNU extensions. -r, --regexp-extended use extended regular expressions in the script. -s, --separate consider files as separate rather than as a single continuous long stream. -u, --unbuffered load minimal amounts of data from the input files and flush the output buffers more often -z, --null-data separate lines by NUL characters --help display this help and exit --version output version information and exit If no -e, --expression, -f, or --file option is given, then the first non-option argument is taken as the sed script to interpret. All remaining arguments are names of input files; if no input files are specified, then the standard input is read. GNU sed home page: <http://www.gnu.org/software/sed/>. General help using GNU software: <http://www.gnu.org/gethelp/>. E-mail bug reports to: <bug-sed@gnu.org>. Be sure to include the word ``sed'' somewhere in the ``Subject:'' field.
[root@cjcos01 ~]# man sed NAME sed - stream editor for filtering and transforming text SYNOPSIS sed [OPTION]... {script-only-if-no-other-script} [input-file]... DESCRIPTION Sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient. But it is sed's ability to filter text in a pipeline which particularly distinguishes it from other types of editors. ...... SEE ALSO awk(1), ed(1), grep(1), tr(1), perlre(1), sed.info, any of various books on sed, the sed FAQ (http://sed.sf.net/grabbag/tutorials/sedfaq.txt), http://sed.sf.net/grabbag/. The full documentation for sed is maintained as a Texinfo manual. If the info and sed programs are properly installed at your site, the command info sed
[root@cjcos01 ~]# info sed File: sed.info, Node: Top, Next: Introduction, Up: (dir) sed, a stream editor ******************** This file documents version 4.2.2 of GNU `sed', a stream editor. ......
歡迎關注我的微信公眾號"IT小Chen",共同學習,共同成長!!!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2695945/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 『學了就忘』Linux基礎命令 — 30、find命令詳細說明Linux
- Linux sed 命令詳解Linux
- shell程式設計-sed命令詳解(超詳細)程式設計
- Linux: yum 命令說明Linux
- Linux重要命之sed命令詳解Linux
- LINUX命令-sedLinux
- nginx 詳解 - 詳細配置說明Nginx
- nginx 詳解 – 詳細配置說明Nginx
- Linux sed命令常用操作詳解及案例!Linux
- Linux命令篇 - sed 命令Linux
- linux常見命令說明Linux
- Linux sed命令用法Linux
- linux之 sed命令Linux
- Linux 三劍客 Awk、Sed、Grep 命令詳解Linux
- Linux三劍客Awk、Sed、Grep 命令詳解Linux
- linux安裝mysql的步驟和方法詳細說明LinuxMySql
- winscp操作說明,winscp操作說明的詳細解讀
- VNC安裝配置詳細說明VNC
- Flask-Limit使用詳細說明FlaskMIT
- Linux命令-Sed用法教程Linux
- Linux grep命令詳細教程Linux
- jpa 方法 命名規則 詳細說明
- sed命令語法詳解
- sed 命令詳解及示例
- Linux sed 命令字串替換使用方法詳解Linux字串
- linux是什麼作業系統 linux和windows的區別詳細說明Linux作業系統Windows
- linux 常見命令及說明雜記Linux
- linux命令yum的詳細解析Linux
- Linux常用命令-詳細Linux
- JQuery Datatables Columns API 引數詳細說明jQueryAPI
- 寬頻路由器的詳細說明路由器
- 『學了就忘』Linux軟體包管理 — 45、yum原始檔詳細說明Linux
- 【Linux學習教程】Linux中Sed命令如何使用?Linux
- Linux基礎命令---文字編輯sedLinux
- Python Matplotlib add_subplot 和 subplots_adjust詳解及程式碼詳細說明 配圖片說明Python
- zblog模板文章釋出時間格式詳細說明
- Thread interrupt() 執行緒中斷的詳細說明thread執行緒
- 詳細說明搜尋引擎優化的過程優化