日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

Linux学习 - sed使用

發(fā)布時(shí)間:2025/3/15 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux学习 - sed使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

歡迎關(guān)注生信寶典:http://mp.weixin.qq.com/s/cywkIeRbhkYTZvkwTeIVSA

sed基本參數(shù)解釋

sed是stream editor的簡(jiǎn)稱,擅長(zhǎng)對(duì)文件進(jìn)行各種正則操作、插入操作、替換操作和刪除操作,可以全局,可以指定特定范圍的行或者特定特征的行。

s/pat/replace/: 正則替換

前插行i, 后插行a, 替換行c, 刪除行d, 輸出行p

N: 讀入下一行,同時(shí)存儲(chǔ);n:讀入下一行,拋棄當(dāng)前行

常見操作

  • 替換特定的文本
ct@ehbio:~/SXBD$ cat mat ID 2 cell 4 cell 8 cell embryo Pou5f1_1 2 3 4 5 Nanog_1 2 3.2 4.3 5 c-Myc 2 3 4 5 Tet1_3 2 3 4 5 ct@ehbio:~/SXBD$ sed 's/ /_/' mat ID 2_cell 4 cell 8 cell embryo Pou5f1_1 2 3 4 5 Nanog_1 2 3.2 4.3 5 c-Myc 2 3 4 5 Tet1_3 2 3 4 5 ct@ehbio:~/SXBD$ sed 's/ /_/g' mat ID 2_cell 4_cell 8_cell embryo Pou5f1_1 2 3 4 5 Nanog_1 2 3.2 4.3 5 c-Myc 2 3 4 5 Tet1_3 2 3 4 5
  • 獲得逗號(hào)分隔的一組數(shù)
ct@ehbio:~/SXBD$ echo `seq 1 10` | sed 's/ /,/g' 1,2,3,4,5,6,7,8,9,10
  • 針對(duì)指定行替換
ct@ehbio:~/SXBD$ sed '2,$ s/_[0-9]//g' mat ID 2 cell 4 cell 8 cell embryo Pou5f1 2 3 4 5 Nanog 2 3.2 4.3 5 c-Myc 2 3 4 5 Tet1 2 3 4 5
  • 替換特定出現(xiàn)位置
# 替換第一個(gè)空格 ct@ehbio:~/SXBD$ sed 's/ /_/1' mat ID 2_cell 4 cell 8 cell embryo Pou5f1_1 2 3 4 5 Nanog_1 2 3.2 4.3 5 c-Myc 2 3 4 5 Tet1_3 2 3 4 5 # 替換第二個(gè)空格 ct@ehbio:~/SXBD$ sed 's/ /_/2' mat ID 2 cell 4_cell 8 cell embryo Pou5f1_1 2 3 4 5 Nanog_1 2 3.2 4.3 5 c-Myc 2 3 4 5 Tet1_3 2 3 4 5 # 替換第二個(gè)及以后的空格 ct@ehbio:~/SXBD$ sed 's/ /_/2g' mat ID 2 cell 4_cell 8_cell embryo Pou5f1_1 2 3 4 5 Nanog_1 2 3.2 4.3 5 c-Myc 2 3 4 5 Tet1_3 2 3 4 5
  • 給序列起名字
ct@ehbio:~/SXBD$ cat seq ACDGTFGGCATGCDTGD ACDGAGCDTAGCDGTA CAGDTAGDCTADTG ct@ehbio:~/SXBD$ sed = seq 1 ACDGTFGGCATGCDTGD 2 ACDGAGCDTAGCDGTA 3 CAGDTAGDCTADTG # 同時(shí)緩沖兩行,但只對(duì)第一行行首操作 ct@ehbio:~/SXBD$ sed = seq | sed 'N;s/^/>/;' >1 ACDGTFGGCATGCDTGD >2 ACDGAGCDTAGCDGTA >3 CAGDTAGDCTADTG
  • 給文件增加標(biāo)題行
ct@ehbio:~/SXBD$ tail -n +2 mat | sort -k2,2n c-Myc 2 3 4 5 Nanog_1 2 3.2 4.3 5 Pou5f1_1 2 3 4 5 Tet1_3 2 3 4 5# 1 表示第一行 # i 表示插入,在指定行前面插入新行 ct@ehbio:~/SXBD$ tail -n +2 mat | sort -k2,2n | sed '1 i ID\t2_cell\t4_cell\t8_cell\tembryo' ID 2_cell 4_cell 8_cell embryo c-Myc 2 3 4 5 Nanog_1 2 3.2 4.3 5 Pou5f1_1 2 3 4 5 Tet1_3 2 3 4 5
  • 提取特定或指定范圍的行
# -n是必須的,阻止程序自動(dòng)輸出匹配行,不然會(huì)導(dǎo)致重復(fù)輸出 ct@ehbio:~/SXBD$ sed -n '2,4p' mat Pou5f1_1 2 3 4 5 Nanog_1 2 3.2 4.3 5 c-Myc 2 3 4 5 ct@ehbio:~/SXBD$ sed -n '4p' mat c-Myc 2 3 4 5
  • 提取符合特定模式的行
ct@ehbio:~/SXBD$ sed -n '/_/ p' mat Pou5f1_1 2 3 4 5 Nanog_1 2 3.2 4.3 5 Tet1_3 2 3 4 5 ct@ehbio:~/SXBD$ sed -n '/-/ p' mat c-Myc 2 3 4 5
  • 去除文件中的空行
ct@ehbio:~/SXBD$ cat mat ID 2 cell 4 cell 8 cell embryo Pou5f1_1 2 3 4 5 Nanog_1 2 3.2 4.3 5c-Myc 2 3 4 5 Tet1_3 2 3 4 5 # 空行就是只有行首和行尾的行 ct@ehbio:~/SXBD$ sed '/^$/d' mat ID 2 cell 4 cell 8 cell embryo Pou5f1_1 2 3 4 5 Nanog_1 2 3.2 4.3 5 c-Myc 2 3 4 5 Tet1_3 2 3 4 5
  • 原位刪除
ct@ehbio:~/SXBD$ cat mat ID 2 cell 4 cell 8 cell embryo Pou5f1_1 2 3 4 5 Nanog_1 2 3.2 4.3 5c-Myc 2 3 4 5 Tet1_3 2 3 4 5# -i 參數(shù)的使用 ct@ehbio:~/SXBD$ sed -i '/^$/d' mat ct@ehbio:~/SXBD$ cat mat ID 2 cell 4 cell 8 cell embryo Pou5f1_1 2 3 4 5 Nanog_1 2 3.2 4.3 5 c-Myc 2 3 4 5 Tet1_3 2 3 4 5
  • 刪除指定范圍的行
ct@ehbio:~/SXBD$ cat mat ID 2 cell 4 cell 8 cell embryo Pou5f1_1 2 3 4 5 Nanog_1 2 3.2 4.3 5 c-Myc_2 2 3 4 5 Tet1_3 2 3 4 5ct@ehbio:~/SXBD$ sed '2,3d' mat ID 2 cell 4 cell 8 cell embryo c-Myc_2 2 3 4 5 Tet1_3 2 3 4 5
  • 記憶匹配

\(\)啟動(dòng)記憶匹配;\1為第一個(gè)匹配項(xiàng),\2為第二個(gè)匹配項(xiàng);匹配項(xiàng)的計(jì)數(shù)根據(jù)左括號(hào)出現(xiàn)的位置來(lái)定,第一個(gè)(包括起來(lái)的為\1。

ct@ehbio:~/SXBD$ echo "hah ehbio hah" | sed 's/ \(.*\) /\t\1\t\1\t/' hah ehbio ehbio hah
  • 奇偶數(shù)行處理
ct@ehbio:~/SXBD$ echo -e "odd\neven\nodd\neven" odd even odd even# 奇偶數(shù)行合并 ct@ehbio:~/SXBD$ echo -e "odd\neven\nodd\neven" | sed 'N;s/\n/\t/' odd even odd even# 取出偶數(shù)行,比較簡(jiǎn)單 # 注意 n (小寫)撇掉了奇數(shù)行 ct@ehbio:~/SXBD$ echo -e "odd\neven\nodd\neven" | sed -n 'n;p' even even# 取出奇數(shù)行 # 先都讀進(jìn)去,然后替換偶數(shù)行為空值,再輸出 ct@ehbio:~/SXBD$ echo -e "odd\neven\nodd\neven" | sed -n 'N;s/\n.*//;p' odd odd
  • Windows/Linux換行符困境

Windows下的換行符是\r\n, Linux下?lián)Q行符是\n, MAC下?lián)Q行符是\r。所以Windows下的文件拷貝到Linux后,常會(huì)出現(xiàn)行尾多一個(gè)^M符號(hào)的情況,從而引起匹配或其它解析問題。

^M的輸是 ctrl+v+M ctrl+v;ctrl+m,不是簡(jiǎn)單的輸入^,再輸入M。

ct@ehbio:~/SXBD$ cat -A windows.txt ID^M$ A^M$ B^M$ C^M$ ct@ehbio:~/SXBD$ sed 's/^M//' windows.txt | cat -A ID$ A$ B$ C$
  • sed中使用bash變量
# 注意雙引號(hào)的使用 ct@ehbio:~/SXBD$ bash_variable='ehbio' ct@ehbio:~/SXBD$ echo "sheng xin bao dan " | sed "s/$/$bash_variable/" sheng xin bao dan ehbio

正則表達(dá)式不同語(yǔ)言略有差別,但整體相近,更多正則操作見:不用Linux也可以的強(qiáng)大文本處理方法。

總結(jié)

以上是生活随笔為你收集整理的Linux学习 - sed使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。