sed簡介:流編輯工具,用來對文本進行過濾與替換操作。
成都創新互聯是一家專業提供沙灣企業網站建設,專注與成都做網站、網站建設、H5網站設計、小程序制作等業務。10年已為沙灣眾多企業、政府機構等服務。創新互聯專業的建站公司優惠進行中。
sed流程:sed通過一次僅讀取一行內容來對某些指令進行處理后輸出。
1、sed通過文件或管道讀取文件內容,但sed默認并不直接修改源文件,而是將讀入的內容復制到緩沖區中,稱之為模式空間。
2、所有的指令操作都是孝判在模式空間找那個進行
3、sed根據相應的指令對模式空間中的內容進行處理并輸出結果,默認輸出至標準輸出(即屏幕上)。
sed基本語法格式:
用法:sed[選巧灶改項]...{腳本指令}[輸入文件]...
選項: -version 顯示sed版本
-help :顯示幫助文檔
-n,-quiet,-silent靜默輸出,默認情況下,sed程序在所有的腳本指令執行完畢后,將自動打印模式空間中的內容。
-e script允許多個腳本指令被執行
-f script-file從文件中讀取腳本指令,對編寫自動化腳本程序很實用
-i ,-in-place 該選項直接修改源文件
-l N 該選項指定l指令可以輸出的行長度,l指令為輸出非打印字符。
-posix 禁用GNU sed擴展功能。
-r 在腳本指令辯察中使用擴展正則表達式。
-s,-separate 默認情況下,sed將把輸入的多個文件名作為一個長的連續的輸入流。而GNU sed則允許把它們當作單獨的文件。
-u,-unbuffered 最低限度的緩存輸入與輸出
a,append表示追加指令;
i,insert表示插入指令;
d,delete表示刪除指令;
s,substitution表示替換指令。
sed腳本指令的基本格式是:
[地址,即路徑]命令(有些命令僅可以對一行操作,有些可以對多行操作),命令也可以用花括號進行組合,使命令序列可以作用于同一個地址。
address{
command1
command2
command3
}
sed的基本工作方式是:
sed的替換命令s:
1、全局替換 : s/old/new/g ,其中g為全局替換,用于替換所有出現的次數; /如果和正則匹配的內容沖突可以使用其他符號,如 : s@old@new@g
2、標志位
為什么要有多行模式: 配置文件一般有單行出現,但也有使用json或XML格式的配置文件,為多行出現。
多行模式處理命令N、D、P
無論是工作中使用還是應付各種面試,linux sort 都是必須要掌握的 linux 基本命令之一。尤其是 linux sort -k 命令,經常會被搞暈,索性好好研究一下 sort 命令
語法:
選項:
參數就不一一介紹了,直接上例子,首先先看下原始的排序數據
cat sort.log
1、打印從哪列開始是亂序
sort -c sort.log; echo $?
sort -C sort.log; echo $?
其中,返回結果 1,表示文件不是已經排序好的文件
2、默認排序( 整行進行ASCII字符升序)
sort sort.log
3、高能來了,讓人迷糊的 k 語法,首先看下 k 的語法格式
這個語法格式可以被其中的逗號(”,”)分為兩大部分,Start部分和End部分
Start和End部分都由三部分組成,其中的Modifier部分就是類似n和r的選項部分,可省略
FStart、Fend,表示使用的域,而CStart則表示在FStart域中從第幾個字符開始算"排序首字符",同理,CEnd表示結尾的第幾個字符是排序末尾字符,.CStart、.CEnd是可以省略的,分別表示從本域的開頭部分開始、到本域的域尾結束,CEnd設定為0,也是表示結尾到域尾。口說無憑,上幾個例子吧
3.1 對第三列進行排序,如果不加n,按照 ASCII字符排序
sort -t $'\t' -k 3 sort.log
3.2 加n后,按照數值排序
sort -t $'\t' -k 3n sort.log
3.3 不指定 FEnd 時,多個 -k 從前往后排序可以,從后往前不行
從后往前,多個 -k,數據符合預期
sort -t $'\t' -k 3n -k 1 sort.log
從后往前,多個 -k ,第三列相同時,按照第一列降序排列,數據符合預期
sort -t $'\t' -k 3n -k 1r sort.log
更換成從前往后
sort -t $'\t' -k 1 -k 3n sort.log
sort -t $'\t' -k 1 -k 3nr sort.log
通過 sort -t $'\t' -k 1 -k 3n sort.log 和 sort -t $'\t' -k 1 -k 3nr sort.log 返回的結果發現,在第一列相等時,無論其三列是正序排列,還是逆序排列,結果都一樣,說明后邊的 -k 未生效
當指定 FEend 后
sort -t $'\t' -k 1,1 -k 3nr sort.log
3.4 作用域
緊跟在字段后的選跡謹項(如"-k3n"的"n"和"-k2nr"的"n","r")稱為私有選項,使用短橫線寫在字段外的選項(如"-n"、"-r")為全局選項。當沒有為字段分配私有選項時,該排序者返字段將繼承全局選項,所有選項包括但不限于"bfnrhM"
除了"b"選項外,其余選項無論是指定在FStart還是FEnd中都是等價的,對于"b"選項,指定在FStart則作用于FStart,指定在FEnd則作用于FEnd
sort -t $'\t' -k1r,2 sort.log ,可以看出一、二列都是倒敘排列
3.5 注意
指定n選項按數值排序時, 由于"n"選項只能識別數字和負號"-",當排序時遇到無法識別字符時,將導致該key的排序立即結束,n選項絕對不會跨域進行比較
默認情況下,sort會進行一次 "最后的排序" ,按照默認規則對整行進行一次排序,這次排序稱為"最后的排序"
sort -t $'\t' -k3n sort.log ,在第三列相等時,整行會按照 ASCII 進行最后的升序排列
sort -t $'\t' -k3,4n -s sort.log ,加了 -s 后,不會進行最后的排序(1000相同時,e在b的前邊了),而是保留原排序
3.6 按照某個姿嫌基域中的第n個字符進行排序
sort -t $'\t' -k2.3,2.3 sort.log ,按第二列第三個字符進行排序
4、 -h 使用易讀性數字(例如:2K、1G)
sort -t $'\t' -k5h sort.log
sort -t $'\t' -k2,2 sort.log|uniq
sort -t $'\t' -k2,2 -u sort.log 會對第二列進行去重,而 sort -t $'\t' -k2,2 sort.log|uniq 會對整行進行去重(當然uniq也可以按照第二列進行去重)
sort整理完了,歡迎大牛指教
可慧緩以使用 Linux 系統的拷貝命令仔李 cp,對原來的文件進行替前戚模換。例如:
$cp newfile oldfile
該命令的作用就是使用現在 newfile 的內容,替換掉原來 oldfile 的內容。
1. sed -i 's/CANCEL_TIME/CANCEL_RECV_TIME/g' csv2drds-TF_B_PAYLOG_D.json
---指定文件替換,將文件中的CANCEL_TIME替換成CANCEL_RECV_TIME;
2.?sed -i 's/CANCEL_TIME/CANCEL_RECV_TIME/g' `grep CANCEL_TIME -rl ./*TF_B_PAYLOG_D*.json`
---批量文件替換,遞歸查找含CANCEL_TIME的文件,將所有文件中的CANCEL_TIME替換成CANCEL_RECV_TIME;
3. sed -i 's/\/tmp\/ditagent\/TF_B_PAYLOG_D.csv/\/vdata\/datapre\/281\/'"$filename"'/g' $jsonname
---帶/的字符串替換,將/tmp/ditagent/TF_B_PAYLOG_D.csv替換成/vdata/datapre/281/'"$filename"'
4.?sed -i 's/^/beginstring/g' *.txt
---型攜在所有行首添加字符串;
5.??sed -i 's/$/endstring/g' *.txt
---在所有行末添加字符串
6. sed -i '2s/原字符串/替換字符串/g' *.txt
---替換第2行
7. sed -i?'$s/原字符串/替換字符串/g'?*.txt
---替換最后一行
8. sed?-i? '2,5s/原字符串/替換字符串/g'?*.txt
---替換2到5行
9. sed -i? '2,$s/原字符串/替換字符串/g'?*.txt
---替換2到最后一行
10. sed 's/\x80/|/g' test.dat |iconv -f gbk -t utf-8 testutf8.dat
---把test.dat中的歐元符號替換成豎線,再將文件gbk格式轉成utf8
-i選項是直接在文件中替換,不在終端輸出;
-r選項是所給的path中的目錄遞歸查找;
-l選項是輸出所猛租蘆有匹配到oldstring的文件;
s/表示替換
/枝帶g表示全局替換
當前名稱:linux命令置換 linux替換命令
文章轉載:http://vcdvsql.cn/article4/ddpicie.html
成都網站建設公司_創新互聯,為您提供網站制作、網站建設、網站設計、網站營銷、、網站改版
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯