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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Shell编程1

發布時間:2023/11/30 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Shell编程1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.1 基礎正則表達式

1.1.1 正則表達式與通配符

正則表達式用來在文件中匹配符合條件的字符串,正則是包含匹配

grep ?awk ?sed 等命令可以支持正則表達式

grep ?(global search regular expression and print out the line) ?提取行

包含匹配字符串

?

通配符用來匹配符合條件的文件名,通配符是完全匹配

ls ?find ?cp 這些命令不支持正則表達式,所以只能使用Shell自己的通配符來進行匹配了

完全匹配文件名

?

anaconda-ks.cfg 安裝信息


1.1.2 基礎正則表達式

元字符 ?作用

* ???前一個字符匹配0次或任意多次

. ? 匹配除了換行符外任意一個字符

^ ? 匹配行首。例如:^hello會匹配以hello開頭的行

$ ??匹配行尾。例如:hello$會匹配以hello結尾的行

[] 匹配中括號中指定的任意一個字符

[^] 匹配除中括號中字符以外的任意字符

\ ???轉義字符 ?用于取消特殊符號的含義

\{n\} 表示其前面的字符恰好出現n次。


[0-9]\{4\} 匹配4位數字

[1][3-8][0-9]\{9\} 匹配手機號碼


\{n,\} ?表示其前面的字符出現不小于n次。

\{n,m\} 不小于n次,不大于m


1.1.3 字符截取命令

cut字段提取命令

cut 選項 文件名

????-f 列號: ?提取第幾列

????-d 分隔符:按照指定分隔符分割列 ?默認分隔符是制表符:Tab

vi student.txt

ID ?Name ?Gender ?Mark

1 ? Zhang ? ?M ???86

2 ? Li ? ?M ???90

3 ? Wang ? ?M ???83

#中間不是空格,是Tab

?

cut -f 2 student.txt

cut -f 2,4 student.txt

cut -d ":" -f 1,3 /etc/passwd

cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1

?

cut 命令的局限——對于空格分隔無能為力,需要用awk命令

df -h | cut -d " " -f 1,3


1.1.4 printf命令

printf '輸出類型輸出格式' 輸出內容

?

輸出類型:

??%ns ???輸出字符串。n是數字,指代輸出幾個字符

??%ni ???輸出整數。n是數字,指代輸出幾個數字

??%m.nf ?輸出浮點數。mn是數字,指代輸出的總位數和小數位數

?

輸出格式:

??\a ???輸出警告音

??\b ???輸出退格鍵Backspace

??\f ???清除屏幕

??\n ???換行

??\r ???回車鍵Enter

??\t ???水平輸出退格鍵,也就是Tab

??\v ???垂直輸出退格鍵,也就是Tab

?

printf '%s %s %s\n' 1 2 3 4 5 6 ?#三個為一組,換行輸出

printf '%s' $(cat student.txt) ?#作為一個連續的整體輸出:IDNAMEGENDER....

printf '%s\t %s\t %s\t %s\t\n' $(cat student.txt) ?#同樣格式輸出

?

awk命令的輸出中支持printprintf命令

?

print:會在每個輸出之后自動加入一個換行符(Linux默認沒有print命令)

printf:是標準格式輸出命令,并不會自動加入換行符,如果需要換行,需要手工加入換行符

?

1.1.5 awk命令??

pattern scanning and processing language

截取列

分隔符默認是Tab 和 空格

?

awk ‘條件1{動作1}條件2{動作2}...’ 文件名

?

條件(Pattern

一般使用關系表達式作為條件

x> 11 判斷變量x是否大于11

x>=11 大于等于

x<=11 小于等于

?

動作(Action

格式化輸出

流程控制語句

?

vi student.txt

ID Name PHP Linux MySQL Average

1 Zhang 82 95 ?????86 ????87.66

2 Li ? ? 74 96 ?????87 ????85.66

3 Wang ? ? 99 83 ?????93 ????91.66

awk '{printf $2 "\t" $6 "\n"}' student.txt

{}之間的是正則

$0代表整行

$1代表第一列

$2代表第二列


?

df -h | awk '{print $1 "\t" $5 "\t" $6}'

df -h | grep sda5 | awk '{print $5}' | cut -d "%" -f 1

?

?

BEGIN

awk 'BEGIN{print "test !!"} {print $2 "\t" $5}' student.txt

BEGIN 后的動作只執行一次

?

FS內置變量

用FS指定分隔符??

awk 'BEGIN{FS=":"}{print $1 "\t" $3}' /etc/passwd

cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN {FS=":"}{printf $1 "\t" $3 "\n"}'

?

END

awk 'END{print "The End"}{printf $2 "\t" $6 "\n"}' student.txt

?

?

關系運算符

cat student.txt | grep -v Name | awk '$6 >= 87 {printf $2 "\n"}'

?

awk 是可以編程的

?

1.1.6 sed 命令

grep 行截取

cut awk 列截取

?

sed是一種幾乎包括在所有UNIX平臺(包括Linux)的輕量級流編輯器。

stream editor for filtering and transforming text

sed主要是用來將數據進行選取、替換、刪除、新增的命令

用于操作命令的結果,實際應用于Shell腳本

?

sed 選項 '[動作]' 文件名

選項:

-n ???一般sed命令會把所有數據都輸出到屏幕,如果加入此選擇,則只會把經過sed命令處理的行輸出到屏幕

-e ???允許對輸入數據應用多條sed命令編輯

-i ???sed的修改結果直接修改讀取數據的文件,而不是由屏幕輸出

?

動作:

a \ 追加,在當前行后添加一行或多行。

添加多行時,除最后一行外,每行末尾需要用\”代表數據未完結

?

c \ 行替換,用c后面的字符串替代原數據行,替換多行時,除最后一行外,

每行末尾需用\”代表數據未完結

?

i \ 插入,在當前行前插入一行或多行。

插入多行時,除最后一行外,每行末尾需要用\”代表數據未完結

?

d 刪除,刪除指定的行

p 打印,輸出指定的行

s 字串替換,用一個字符串替換另外一個字符串。格式為“行范圍s/舊字串/新字串/g

vim中的替換格式類似

?

sed '2p' student.txt

#查看文件的第二行,文件全部顯示,第二行出現兩次

?

sed -n '2p' student.txt

#只出現第二行

?

df -h | sed -n '2p'

?

sed '2,4d' student.txt

#刪除第二行到第四行的數據,但不修改文件本身

?

sed '2a hello' student.txt

#在第二行后追加hello

?

sed 2i hello \ ??worldstudent.txt

#在第二行前插入兩行數據

?

sed '2c No such person' student

#數據替換

?

字符串替換

sed 's/舊字串/新字串/g' 文件名

?

sed '3s/74/99/g' student.txt

#在第三行中,把74換成99

?

sed -i '3s/74/99/g' student.txt

#sed操作的數據直接寫入文件

?

sed -e 's/Zhang//g;s/Wang//g' student.txt

#同時把“Zhang”和“Wang”替換為空

盡量不用i,如需修改文件,用vim編輯器


1.1.7 字符處理命令??

排序命令 sort

sort 選項 文件名 ?可以接受管道符

-f 忽略大小寫

-n 數值型排序,默認以字符串型排序

-r 反向排序

-t 指定分隔符,默認為制表符

-k n,m 指定從n字段到m字段進行排序

?

sort /etc/passwd

sort -r /etc/passwd

sort -t ":" -k 3,3 /etc/passwd UID排序

sort -n -t ":" -k 3,3 /etc/passwd


統計命令wc

wc 選項 文件名 ?可以接受管道符

-l 行數

-w 單詞數

-m 字符數






總結

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

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