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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sed知识整理

發布時間:2024/4/13 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sed知识整理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

sed命令格式

sed [options] 'command' file(s) sed [options] -f scriptfile file(s) ./sedscript file(s)

選項

選項意義
-n只打印模式匹配的行(默認會打印所有行)
-e直接在命令行模式上進行sed動作編輯,此為默認選項
-f將sed的動作寫在一個文件內,用–f filename 執行filename內的sed動作
-r支持擴展表達式
-i直接修改文件內容

命令部分

sed命令有2部分組成:

  • 文本定位
  • 編輯命令

文本定位

patternmeaning
xx為一行號,如1
x,y表示行號范圍從x到y,如2,5表示從第2行到第5行
/pattern/查詢包含模式的行。例如/disk/或/[a-z]/。當此模式作為范圍時,行號為匹配的第一行。
/pattern/pattern/查詢包含兩個模式的行。例如/disk/disks/
/pattern/,x在給定行號上查詢包含模式的行。如/ribbon/,3
x,/pattern/通過行號和模式查詢匹配行。3./vdu/
x,y!查詢不包含指定行號x和y的行。1,2!
/pattern/,4p #如果pattern匹配的行在第4行之后,僅打印匹配pattern的行。 /pattern1/,/pattern2/p #定位多行,開始行號為pattern1匹配的第1行,**結束行號為pattern2的第一行**,所以通過這種方式過濾閉區間的范圍會出錯。如果2個模式中的有一個沒有匹配上,則不會匹配任何行。

編輯命令

commandmeaning
p打印匹配行
=顯示文件行號
a在定位行號后附加新文本信息
i在定位行號后前插入新文本信息
d刪除定位行
c用新文本替換定位文本
s使用替換模式替換相應模式
r從另一個文件中讀文本
w寫文本到一個文件
q第一個模式匹配完成后推出或立即推出
l顯示與八進制A S C I I代碼等價的控制字符
{ }在定位行執行的命令組
n從另一個文件中讀文本下一行,并附加在下一行
N在數據流中添加下一行以創建用于處理的多行組
g將模式2粘貼到/pattern n/
y傳送字符
n延續到下一輸入行;允許跨行的模式匹配語句

正則表達式

擴展正則表達式(必須結合-r選項)

字符意義
^錨點行首的符合條件的內容,用法格式"^pattern"
$錨點行首的符合條件的內容,用法格式"pattern$"
^$空白行
.匹配任意單個字符
*匹配緊挨在前面的字符任意次(0,1,多次)
.*匹配任意長度的任意字符
\?匹配緊挨在前面的字符0次或1次
{m,n}匹配其前面的字符至少m次,至多n次
{m,}匹配其前面的字符至少m次
{m}精確匹配前面的m次{0,n}:0到n次
<錨點詞首----相當于 \b,用法格式:<pattern
\>錨點詞尾,用法格式:>pattern
\< pattern \>單詞錨點
( )分組,用法格式:pattern,引用\1,\2
[]匹配指定范圍內的任意單個字符
[^]匹配指定范圍外的任意單個字符
[:digit:]所有數字, 相當于0-9, [0-9]—> [[:digit:]]
[:lower:]所有的小寫字母
[:upper:]所有的大寫字母
[:alpha:]所有的字母
[:alnum:]相當于0-9a-zA-Z
[:space:]空白字符
[:punct:]所有標點符號

示例

sed -n '2p' file.txt //打印第二行 sed -n '1,4p' file.txt //print 1-4 line sed -n '1,$p' file.txt //print allsed -n '/require/'p cart.php /匹配require sed -n '/$/'p cart.php /匹配$特殊字符 要用 sed -n '/.*uire/'p cart.php sed -n -e '/require/p' -e '/require/=' cart.php //匹配require 并且打印行號 sed -n '/require/=' cart.php //只打印匹配的行號

注意

處理單引號

把test內容中單引號替換成雙引號 sed 's/'"'"/'"''/g' test ==> sed 's/' " ' " / ' " ' '/g' test 解析下: 's/' => 要進行替換操作,后緊跟匹配字符 "'" => 用雙引號包裹著單引號 / =>分割符 '"' => 用單引號包裹著雙引號 '/g' =>分隔符,全局替換當然還可以使用下面這兩種方法替換: sed s#\'#\"#g test 最外層使用#分隔,里面使用轉義單引號,轉義雙引號 sed "s/'/\"/g" test 最外層使用雙引號,里面使用單引號,轉義雙引號echo "mmm'sss" | sed 's/'"'"/'"''/g' echo "mmm'sss" | sed s#\'#\"#g echo "mmm'sss" | sed "s/'/\"/g"

替換

'word/s/^/Li/g' #匹配word的行,并在行首加Li 's/linux/jie &/g' #匹配linux,在linux前加 jie #\1 \2 表示匹配的分組,&表示,匹配的內容(匹配表達式的部分,不是整行) #s的分界符,可以是/,#,$等,可以指定

Suse系統中,特殊情況

沒有研究過其他系統,在Suse系統中,sed的{m,n},(),+等元字符,不能加\,不然就會出錯。
反引號(`),不需要加\。
替換的變量不能有換行符,
處理掉換行符語句:

':a;N;s/\n/ /g;b a;'

通過/pattern1/,/pattern2/定位多行,開始行號為pattern1匹配的第1行,結束行號為pattern2的第一行,所以通過這種方式過濾閉區間的范圍會出錯。
如果2個模式中的有一個沒有匹配上,則不會匹配任何行。

總結

以上是生活随笔為你收集整理的sed知识整理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。