1. 程式人生 > >linux shell 中sed用法

linux shell 中sed用法

轉自:http://www.360doc.com/content/16/1118/16/38309198_607576538.shtml

一, 基本概述

(1)基本介紹

sed是一款流編輯工具,用來對文字進行過濾與替換工作,  sed通過輸入讀取檔案內容,但一次僅讀取一行內容進行某些指令處理後輸出,sed更適合於處理大資料檔案。
(2)工作原理

sed在處理文字檔案的時候,會在記憶體上建立一個模式空間,然後把這個檔案的每一行調入模式空間用相應的命令處理,處理完輸出;接著處理下一行,直到最後。

(3)與vim的區別

vim需要通知處理檔案的哪幾行才會去處理,sed預設會處理檔案的所有行,除非你告訴它不處理哪幾行。

二, sed的基本語法

(1)sed [選項]  [定址commands] [inputfile]

關於定址:

定址可以是0個、1個、2個;通知sed去處理檔案的哪幾行。

0個:沒有定址,處理檔案的所有行

1個:行號,處理行號所在位置的行

2個:行號、正則表示式,處理被行號或正則表示式包起來的行

(2)

選項:

       --version            顯示sed版本hao

       --help               顯示幫助文件

       -n 關閉預設輸出,預設將自動列印所有行

       -e 多點編輯,允許多個指令碼指令被執行。

       -r 支援擴充套件正則+ ? () {} |

       -i 可以修改原檔案,慎用!

       -f 支援使用指令碼

命令:

       p列印行

       d        刪除行

       s           替換

       n替換第幾個匹內容

       w另存為

       a         之後新增一行

       i         當前行之前插入文字

       y        替換匹配內容

三, 實際案例講解

(1)p(與-n合用)

檢視passwd檔案的1~3行

@1,列印一到三行

[[email protected] ~]# cp /etc/passwd /t1

[[email protected] ~]#  cat -n t1 | sed  -n '1,3p'

    1root:x:0:0:root:/root:/bin/bash

    2bin:x:1:1:bin:/bin:/sbin/nologin

    3daemon:x:2:2:daemon:/sbin:/sbin/nologin

@2,檢視passwd檔案的lp~halt行

[[email protected] ~]#  cat -n t1 |sed -n '/lp/,/halt/p'

    5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    6sync:x:5:0:sync:/sbin:/bin/sync

    7shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

    8halt:x:7:0:halt:/sbin:/sbin/halt

@3, 列印基數行(從第一行開始,每隔一行一輸出)

@4,列印uid是0或1的行

[[email protected] ~]# sed -n '/x:[01]:/p' t1

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

(2)d 刪除

@1,刪除第一行

@2,刪除第一行和第三行(與-e選項合用)

@3,;選項的使用和-e一樣

@4,取反:!

[[email protected] ~]#  cat -n t1 | sed '1!d'

    1root:x:0:0:root:/root:/bin/bash

(3)s 查詢替換 s///

語法:

       '[address]s/pattern/replacement/flags'

                       old     new

flags:

           n:1-512 之間的正整數,表示替換模式裡面出現的第幾次內容

           p:列印

           g:全域性修改

           w:另存為

       這幾個選項是可以複合使用的,但是寫的要有意義。(pg ;nw)

注:這裡為部分擷取

@1預設會替換行裡面的第1個匹配

[[email protected] ~]# sed 's/root/ROOT/' t1

ROOT:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

@2全部替換

[[email protected] ~]# sed 's/root/ROOT/g' t1

ROOT:x:0:0:ROOT:/ROOT:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

@3替換第2個匹配

[[email protected] ~]# sed 's/root/ROOT/2' t1

root:x:0:0:ROOT:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

@4列印

[[email protected] ~]# sed 's/root/ROOT/p' t1

ROOT:x:0:0:root:/root:/bin/bash

ROOT:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin‘

[[email protected] ~]# sed -n 's/root/ROOT/p' t1

ROOT:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/ROOT:/sbin/nologin

@5另存為

[[email protected] ~]# sed -n 's/root/ROOT/w /tx' t1

[[email protected] ~]# cat /tx

ROOT:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/ROOT:/sbin/nologin

@6在檔案的每行前面新增 # 註釋

[[email protected] ~]# sed 's/^/#/' t1

#root:x:0:0:root:/root:/bin/bash

#bin:x:1:1:bin:/bin:/sbin/nologin

#daemon:x:2:2:daemon:/sbin:/sbin/nologin

@7刪掉檔案的第1個字元

[[email protected] ~]# sed 's/^.//1' t1

oot:x:0:0:root:/root:/bin/bash

in:x:1:1:bin:/bin:/sbin/nologin

aemon:x:2:2:daemon:/sbin:/sbin/nologin

@8刪掉檔案的第2個字元

[[email protected] ~]# sed 's/.//2' t1

rot:x:0:0:root:/root:/bin/bash

bn:x:1:1:bin:/bin:/sbin/nologin

(4)i 從當前行插入

在第一行前插入hello

[[email protected] ~]# sed '1i hello' t1

hello

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

(5)a 從當前行後新增

在第一行後新增hello

[[email protected] ~]# sed '1a hello' t1

root:x:0:0:root:/root:/bin/bash

hello

bin:x:1:1:bin:/bin:/sbin/nologin

(6)-r 支援擴充套件正則

[[email protected] ~]# sed -r 's/^(.)(.)/\1/' t1

rot:x:0:0:root:/root:/bin/bash      //相當於把前兩個字元替換成第一個字元,這樣就實現了刪除第二個字元

bn:x:1:1:bin:/bin:/sbin/nologin

demon:x:2:2:daemon:/sbin:/sbin/nologin

其他方法:

@1#sed 's/.//2' t1

@2#sed 's/^\(.\)\(.\)/\1/' t1

(7)y 替換,按照位置來匹配替換  y///      不識別re

[[email protected] ~]# sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' t1

ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH

BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN

DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN

(8)替換匹配行

@1[[email protected] ~]# sed -n '1c ROOT' t1

ROOT

(9)q 退出

[[email protected] ~]# sed '1q ' t1

root:x:0:0:root:/root:/bin/bash

(10)-i        可以修改原檔案

(11)-f 支援指令碼

四.sed如何處理資料

    PATT:模式空間,處理檔案的輸入行,處理檔案的空間,最多儲存8192位元組,相當於車間sed把流內容在這裡處理。

    HOLD:保留空間,用來儲存已經處理的輸入行;最多儲存8192位元組;預設有一個空行,相當於倉庫,加工的半成品在這裡臨時儲存。

COMM:命令

h:將模式空間裡的內容,複製到保留空間裡,覆蓋原來的內容 >

H:將模式空間裡的內容,追加到保留空間裡,保留原來的內容 >>

g:將保留空間裡的內容,複製到模式空間裡,覆蓋原來的內容

G:將保留空間裡的內容,追加到模式空間裡,保留原來的內容

n:對匹配行的下一行進行處理

x:交換模式空間和保留空間的內容

(1)h;G

@1.將第一行的內容放到打三行後面

@2.在每行的後面新增1個空行

注:1.保留空間裡預設有一個空白行。2,‘G’預設處理全域性

@3.把第1行到第4行的資料複製到第5行後面

注:1h是為了覆蓋保留空間裡的空白行

@4. 把第1行到第4行的資料剪下到第5行後面

(2)n    對匹配行的下一行進行處理

(3)x     交換模式空間和保留空間的內容

相關推薦

linux shell sed用法

轉自:http://www.360doc.com/content/16/1118/16/38309198_607576538.shtml 一, 基本概述 (1)基本介紹 sed是一款流編輯工具,用來對文字進行過濾與替換工作,  sed通過輸入讀取檔案內容,但一次僅

linuxsed用法

命令一、sed命令介紹:1、含義:Stream Editor文本流編輯,sed是一個“非交互式的”面向字符流的編輯器。能同時處理多個文件多行的內容,可以不對原文件改動,把整個文件輸入到屏幕,可以把只匹配到模式的內容輸入到屏幕上。還可以對原文件改動,但是不會再屏幕上返回結果。2、功能:主要用來自動編輯一個或多個

Linux Shell有三種引號的用法

containe ubunt ref highlight 處理 alt 返回 cin test Linux Shell中有三種引號,分別為雙引號(" ")、單引號(‘ ‘)以及反引號(` `)。 其中雙引號對字符串中出現的$、‘‘、`和\進行替換;單引號不進行替換,將字符串

linux shell 的 2>&1 用法說明

pass 重定向 分解 說明 分別是 理解 重新 這樣的 通用 linux中有三種標準輸入輸出,分別是 STDIN,STDOUT,STDERR,對應的數字是 0,1,2。 STDIN 是標準輸入,默認從鍵盤讀取信息; STDOUT 是標準輸出,默認將輸出結果輸出至終端,也

shellsed命令的用法

直接 添加 不支持 sed命令 交互 擴展正則 每一個 shel 編輯 sed (stream editor)流編輯器也是linux中的一條命令,在shell中經常需要用到的非交互式修改文件內容的命令。sed處理文本是按行處理,也就是讀一行處理一行。sed的命令基本格式是:

shellLinux shell括號的用法

linux shell 中括號 運維 編程 Linux shell中括號的用法 概述 本文主要介紹Linux中括號的用法,主要包含判斷文件和變量。 **註意事項**:中括號兩邊必須有空格。 使用中括號會涉及到的知識 &&、|| 在本文對文件或

三劍客-sed linuxsed用法

linux中sed用法   sed是一個很好的檔案處理工具,本身是一個管道命令,主要是以行為單位進行處理,可以將資料行進行替換、刪除、新增、選取等特定工作,下面先了解一下sed的用法sed命令列格式為:     &n

linux shell\w \s \d \b ^ $等常用匹配用法

正則表示式 \w \s \d \b 用法: . 匹配除換行符以外的任意字元  \w 匹配字母或數字或下劃線  \s 匹配任意的空白符  \d 匹配數字         

Linux Shell引號的用法

shell可以識別4種不同型別的引字元號: 單引號字元' 雙引號字元" 反斜槓字元\ 反引號字元` 1. 單引號 ( ' ' )[email protected][script]$ grep Susan phonebook Susan Goldberg 403-

Linux shell&,&&,|,||的用法

註入 輸入 一是 ons bili 註意 second 博文 arc 前言 在玩dvwa的命令註入漏洞的時候,遇到了沒有預料到的錯誤,執行 ping 127.0.0.1 & echo "<?php phpinfo(); ?>" >

Pytohn實現Linux shell的wc命令

python wc #!/usr/bin/python import sys import os from optparse import OptionParser def opt(): parser = OptionParser() parser.add_option("-c

1.Linux Shell的變量

proc shell parameter 顯式 nbsp 位置 login shell中的 自己 1. Shell變量類型 Shell是一種動態類型語言(不使用顯式的數據聲明)和弱類型語言(變量的類型操作根據需求而不同)。Shell中的變量是不分類型的(都是字符串類型),但

常見Linux Shell的特殊符號含義

運算 variable help erb null 作用 pip == 不可 在Shell的實際使用中,有編程經驗的很容易上手,但稍微有難度的是shell裏面的那些個符號,各種特殊的符號在我們編寫Shell腳本的時候如果能夠用的好,往往能給我們起到事半功倍的效果,下面就羅列

linux shell 的特殊符號

萬用字元,代表零個或多個任意字元? 只代表一個任意的字元 註釋符號,即#後面的內容都會被忽略 \ 脫義字元,會將後面的特殊符號還原為普通字元| 管道符,將前面的命令的輸出作為後面命令的輸入wc -l 計算一個文件有多少行命令cut格式: cut -d '分隔字元‘ [ -cf ] n-d 後面跟分隔字元

Linux shell自動完成登錄

分享 ont 指定 png 服務 ict 密碼 操作 uri 在寫shell腳本時,需要登錄到不同的服務器上執行相關命令,在未建立信任之前如何批量操作。 1、ssh 首次登錄服務器時會提示RSA key fingerprint輸入yes/no,可以通過

linux Shell grep+wc取值在shell的結果與手動執行結果不一致的坑

vim restart.sh #!/bin/bash VDS=ps -ef |grep -w vds|grep -v grep|wc -l if [ $VDS -eq 0 ];thencd /usr/local/program;./linux-start.sh restartelseecho "It's

Linux Shell程式設計 sed命令

概述 sed命令用來選取、替換、刪除、新増資料 sed 是一種幾乎可以應用在所有 UNIX 平臺(包括 Linux)上的輕量級流編輯器。sed 有許多很好的特性。首先,它相當小巧,通常要比你所喜愛的指令碼語言小多倍。其次,因為 sed 是一種流編輯器,所以,它可以對從如管道這樣的標準輸入中接收的

linux shell /dev/null 2>&1 含義

shell中可能經常能看到:echo log > /dev/null 2>&1 命令的結果可以通過%>的形式來定義輸出/dev/null :代表空裝置檔案>  :代表重定向到哪裡,例如:echo "123" > /home/123.

linux shell./a.sh , sh a.sh , source ./a.sh, . ./a.sh的區別

      在linux shell中, 執行shell script的方式有多種, 有什麼區別呢?  實際上我之前說過, 現在用一個簡單例子再來說下。       a.sh的內容是: #! /bin/bash echo hello world echo "PID of

[work] Linux Shell的陣列及遍歷

在Linux下使用shell的時候,為方便起見,偶爾會用到一下陣列。陣列的申明方式是: [java] view plain copy array=(element1 element2 element3 .... elementN)   也就是直接用圓括號包陣列元素包起來,陣