《Shell指令碼學習指南》第三章 查詢與替換

2021-08-26 16:49:14 字數 2606 閱讀 5794

3.1 查詢文字

grep:使用posix定義的基本正規表示式(bre)。

egrep:使用擴充套件正規表示式(ere)。

fgrep:快速grep。使用優化的演算法,匹配固定字串而非正規表示式。

1992 posix標準將這三個改版整合成乙個grep程式。

$ who | grep -f austen

使用-f選項查詢固定字串。事實上,只要匹配的模式裡未含有正規表示式的meta字元,

則grep預設行為模式就等同於使用了-f。

3.2.6 在文字檔案裡進行替換

一般來說,執行文字替換的正確程式應該是sed - 流編輯器。

sed 's/:.*//' /etc/passwd | 刪除第乙個冒號之後的所有東西

sort -u 排序列表並刪除重複部分

任何可顯示的字元都能作為定界符。

sed 's;/home/tolstoy/;/home/lt/;'

sed 's/\\/\\/g'

用-e和-f選項,不用將多個sed通過管道串起來,就可以一次替換多個。

$ sed -e 's/foo/bar/g' -e 's/chicken/cow/g' file1.xml > file2.xml

或$ cat fixup.sed

s/foo/bar/g

s/chicken/cow/g

...$ sed -f fixup.sed file1.xml > file2.xml

3.2.8 sed的運作

命令列上的每個檔名會依次開啟與讀取。如果沒有檔案,則使用標準輸入。

sed讀取每個檔案,一次讀一行,將讀取的行放到記憶體的乙個區域(模式空間)。

所有編輯上的操作都會應用到模式空間的內容,當所有操作完成後,sed會將模式

空間的最後內容列印到標準輸出,再回到開始處,讀取另乙個輸入行。

3.3 字段處理

用空格(製表符)或特定的定界符(如冒號)。

#字元起始的行表示注釋,軟體必須可忽略這樣的行才行。

以定界符分隔欄位的最好例子就是/etc/passwd了:一行表示乙個使用者,每個欄位以冒號隔開。

該檔案含有7個字段:

tolstoy:x:2076:10:leo tolstoy:/home/tolstoy:/bin/bash

1.使用者名稱:2.加密後密碼:3.使用者id:4.使用者組id:5.姓名:6.根目錄:7.登入的shell。

3.3.2 使用cut選定字段

$ cut -d : -f 1,5 /etc/passwd

root:root

...tolstoy:leo tolstoy

$ cut -d : -f 6 /etc/passwd

/root

.../home/tolstoy

3.3.3 使用join連線字段

以乙個共同的鍵值(主欄位)將多個檔案結合在一起。

$ cat sales

#業務員 資料量

joe 100

jane 200

herman 150

chris 300

$ cat quotas

#業務員 配額

joe 50

jane 75

herman 80

chris 95

#! /bin/sh

# merge-sales.sh

# 刪除注釋並排序資料檔案

sed '/^#/d' quotas | sort > quotas.sorted

sed '/^#/d' sales | sort > sales.sorted

# 以第乙個鍵值作結合

join quotas.sorted sales.sorted

# 刪除快取檔案

rm quotas.sorted sales.sorted

3.3.4 使用awk重新編排字段

awk程式基本架構:pattern

pattern通常是由斜槓括起來的ere,action通常是乙個明了的print語句。

省略pattern則會對每一條輸入記錄執行action,省略action則等同於。

awk自動將各個記錄分為字段,並將每條記錄內欄位數目儲存到內建變數nf。

預設以空白分隔,還可以將fs變數設定為乙個不同的值。$加數字表示字段值。

awk '' 列印第1個字段

awk '' 列印第2與第5個字段

awk '' 列印第乙個與最後乙個字段

awk 'nf > 0 ' 列印非空行

awk 'nf > 0' 同上

awk -f : '' /etc/passwd 設定字段分隔字元,-f選項自動設定fs變數。

root root

...tolstoy leo tolstoy

記得在print的引數間用逗號隔開,否則awk將連線相鄰的所有值。

awk -f: '' /etc/passwd

userrootis reallyroot

...usertolstoyis reallyleo tolstoy

混音指南 第三章 學習混音

現在有兩種處理eq的方式 掃頻,揪出來乙個不好的頻段,壓下去 想象一下你需要的聲音,直接通過eq做出來 誠實地說,第一種是我用的。第一種就是碰運氣式的做法,做出什麼樣的聲音都是天時地利人和。第二種人有自己的混音觀念,知道自己想要什麼樣的聲音,並實現。我們可以不斷地對作品進行評價,找到問題所在,如 吊...

JavaScript權威指南 第三章

var scope global 宣告乙個全域性變數 function checkscope checkscope local scope global 宣告乙個全域性變數,可以不使用var來宣告 function checkscope2 checkscope2 local local var sc...

shell指令碼學習指南 學習筆記 1 6章

grep 找資料 sed 替換輸資料 cut 格式化文件 join 連線,連線前排序 sort 排序資料 uniq 資料排重 fmt 格式化文字 awk 重組資料,文字 wc 計算行數l,位元組數c,字數w lp 列印 tr 轉義字元 readonly 設為唯讀 export 匯入當前環境 unse...