awk&&sed指令碼語言

來源:互聯網
上載者:User

sed操作符舉例

sed操作符舉例

標記法

效果

8d

刪除輸入的第8行.

/^$/d

刪除所有空行.

1,/^$/d

從輸入的開頭一直刪除到第1個空行(第一個空行也刪除掉).

/Jones/p

只列印那些包含"Jones"的行(使用-n選項).

s/Windows/Linux/

在每個輸入行中, 將第一個出現的"Windows"執行個體替換為"Linux".

s/BSOD/stability/g

在每個輸入行中, 將所有"BSOD"都替換為"stability".

s/ *$//

刪除掉每行結尾的所有空格.

s/00*/0/g

將所有連續出現的0都壓縮成單個的0.

/GUI/d

刪除掉所有包含"GUI"的行.

s/GUI//g

將所有"GUI"都刪除掉, 並保持剩餘部分的完整性.

 

 

1、把檔案中所有的空行刪除
#!/bin/bash
sed -e /^$/d "$1" file.txt
=sed -e '/^$/d' file.txt
exit 0

-e:表示後邊跟著的是"編輯"命令(可選) edit
^:表示行首
$:表示行尾
d:刪除命令 delete
"$1":將命令列參數引用起來,表示可以在檔案名稱中使用空白字元或特殊字元

2、將一個檔案中的某個字串(或匹配模式), 替換為另一個字串(或匹配模式)
sed -e "s/$old_pattern/$new_pattern/g" $file_name
s: substitution替換
"g", 即全域標誌, 用來自動替換掉每行中

3、寫記錄檔
echo "`date` + `whoami` + $OPERATION "$@"" >> $file_name
$OPERATION: 在操作執行之前, 記錄到記錄檔中

4、列印ASCII碼的字元表
#!/bin/bash
# pr-ascii.sh: 列印ASCII碼的字元表.

START=33   # 可列印的ASCII字元的範圍(十進位).
END=125

echo " Decimal   Hex     Character"   # 表頭.
echo " -------   ---     ---------"

for ((i=START; i<=END; i++))
do
echo $i | awk '{printf("  %3d       %2x         %c/n", $1, $1, $1)}'
# 在這種上下文中, 不會運行Bash內建的printf命令:
#     printf "%c" "$i"
done

exit 0

 

 

 

 

1、# 將原來的所有空行刪除並在每一行後面增加一空行。
 # 這樣在輸出的文本中每一行後面將有且只有一空行。
 sed '/^$/d;G'
2、#刪除所有偶數行
 sed 'n;d'
3、# 在匹配式樣“regex”的行之前和之後各插入一空行
 sed '/regex/{x;p;x;G;}'
4、# 在匹配式樣“regex”的行之前和之後各插入一空行
 sed '/regex/{x;p;x;G;}'
# 為檔案中的每一行進行編號(簡單的靠左對齊方式)。這裡使用了“定位字元”
 # (tab,見本文末尾關於'/t'的用法的描述)而不是空格來對齊邊緣。
 sed = filename | sed 'N;s//n//t/'

 # 對檔案中的所有行編號(行號在左,文字右端對齊)。
 sed = filename | sed 'N; s/^/     /; s/ */(./{6,/}/)/n//1  /'

 # 對檔案中的所有行編號,但只顯示非空白行的行號。
 sed '/./=' filename | sed '/./N; s//n/ /'

 # 計算行數 (類比 "wc -l")
 sed -n '$='

# 只在行中出現字串“baz”的情況下將“foo”替換成“bar”
 sed '/baz/s/foo/bar/g'
# 將“foo”替換成“bar”,並且只在行中未出現字串“baz”的情況下替換
 sed '/baz/!s/foo/bar/g'

 

其它
1、將myfile.txt中所有內容abc -> ABC
 sed -e 's/abc/ABC/g' myfile.txt:
 sed -e 's:/abc:ABC:g' myfile.txt

2、指定行數內進行此操作:
sed -e '1,10s/abc/ABC/g' myfile.txt
只在第一到第十行(包括這兩行)

3、 <b>This</b> is what <b>I</b> meant. 
sed -e 's/<.*>//g' myfile.html   ->meant.
sed -e 's/<[^>]*>//g' myfile.html   ->This is what I meant.
'[^>]' 指定“非 '>'”字元,其後的 '*' 完成該運算式以表示“零或多個非 '>' 字元”。

4、[a-z] [A-Z]

5、假設您正在回複一條訊息。下例將在每一行前面加上短語 "ralph said: ":
sed -e 's/.*/ralph said: &/' origmsg.txt

輸出如下:
 ralph said: Hiya Jim, ralph said: ralph said:
 I sure like this sed stuff! ralph said:  

6、刪除以#開頭的內容
sed -e /^#/d myfile.txt

輸出檔案中的 main() 函數
sed -n -e '/main[[:space:]]*(/,/^}/p' file.txt
sed -n -e '/main[ -V]*(/,/^}/p' file.txt

反轉行
sed -e '1!G;h;$!d' forward.txt > backward.txt
解釋:
'G' 命令將只應用第一行。然而,還有一個 '!' 字元 -- 該 '!' 字元 忽略該地址,即,'G' 命令將應用到除第一行之外的 所有行。
如果命令是 '$d',則將只把 'd' 命令應用到檔案中的最後一行('$' 地址是指定最後一行的簡單方式)。然而,有了 '!' 之後,'$!d' 將把 'd' 命令應用到除最後一行之外的 所有行。

7、基於 DOS/Windows 的文字檔在每一行末尾有一個 CR(斷行符號)和 LF(換行),而 UNIX 文本只有一個換行。

UNIX 文本移至 Windows 系統
sed -e 's/$//r/' myunix.txt > mydos.txt

DOS/Windows 格式的文本轉換成可信賴的UNIX 格式
sed -e 's/.$//' mydos.txt > myunix.txt

10、指令碼語言:
change.sh:  sed -e 's//(.*/) /(.*/) /(.*/)/Victor /1-/2 Von /3/' myfile.txt 
myfile.txt: foo bar oni eeny meeny miny larry curly moe jimmy the weasel
執行:  ./change.sh
輸出:  Victor  foo bar oni eeny meeny miny larry curly moe jimmy the weasel- Von

 

引用:

http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/abs-3.9.1_cn/html/wrapper.html#EX3

http://sed.sourceforge.net/sed1line_zh-CN.html

http://www.ibm.com/developerworks/cn/linux/shell/sed/sed-1/

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.