国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Linux編程Shell自動(dòng)化腳本】03 shell四劍客(find、sed、grep、awk)

這篇具有很好參考價(jià)值的文章主要介紹了【Linux編程Shell自動(dòng)化腳本】03 shell四劍客(find、sed、grep、awk)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、find

語法格式

find [path] [expression]

參數(shù)說明 :

path 是要查找的目錄路徑,可以是一個(gè)目錄或文件名,也可以是多個(gè)路徑,多個(gè)路徑之間用空格分隔,如果未指定路徑,則默認(rèn)為當(dāng)前目錄。

expression 是可選參數(shù),用于指定查找的條件,可以是文件名、文件類型、文件大小等等。

1. 常用expression

以下列出最常用expression的部分:

  • -name pattern:按文件名查找,支持使用通配符 * 和 ?。
  • -type type:按文件類型查找,可以是 f(普通文件)、d(目錄)、l(符號(hào)鏈接)等。
  • -size [+-]size[cwbkMG]:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,單位可以是 c(字節(jié))、w(字?jǐn)?shù))、b(塊數(shù))、k(KB)、M(MB)或 G(GB)。
  • -mtime days:按修改時(shí)間查找,支持使用 + 或 - 表示在指定天數(shù)前或后,days 是一個(gè)整數(shù)表示天數(shù)。
  • -user username:按文件所有者查找。
  • -group groupname:按文件所屬組查找。

2. 時(shí)間參數(shù)

find 命令中用于時(shí)間的參數(shù)如下:

  • -amin n:查找在 n 分鐘內(nèi)被訪問過的文件。
  • -atime n:查找在 n*24 小時(shí)內(nèi)被訪問過的文件。
  • -cmin n:查找在 n 分鐘內(nèi)狀態(tài)發(fā)生變化的文件(例如權(quán)限)。
  • -ctime n:查找在 n*24 小時(shí)內(nèi)狀態(tài)發(fā)生變化的文件(例如權(quán)限)。
  • -mmin n:查找在 n 分鐘內(nèi)被修改過的文件。
  • -mtime n:查找在 n*24 小時(shí)內(nèi)被修改過的文件。

在這些參數(shù)中,n 可以是一個(gè)正數(shù)、負(fù)數(shù)或零。正數(shù)表示在指定的時(shí)間前修改或訪問過的文件,負(fù)數(shù)表示在指定的時(shí)間內(nèi)修改或訪問過的文件,零表示在當(dāng)前時(shí)間點(diǎn)上修改或訪問過的文件。

例如:-mtime 0 表示查找今天修改過的文件,-mtime -7 表示查找過去一周以內(nèi)修改過的文件。

關(guān)于時(shí)間 n 參數(shù)的說明:

  • +n:查找比 n 天前更早的文件或目錄。
  • -n:查找在 n 天內(nèi)更改過屬性的文件或目錄。
  • n:查找在 第 n 天前(指定那一天)更改過屬性的文件或目錄。

3. 其他選項(xiàng)參數(shù)

3.1 查找深度
  • -maxdepth levels
    Descend at most levels (a non-negative integer) levels of directories below the starting-points. Using -maxdepth 0 means only apply the tests and actions to the starting-points themselves.
  • -mindepth levels
    Do not apply any tests or actions at levels less than levels (a non-negative integer). Using -mindepth 1 means process all files except the starting-points.
3.2 執(zhí)行命令
  • -exec command ;
    Execute command; true if 0 status is returned. All following arguments to find are taken to be arguments to the command until an argument consisting of ‘;’ is encountered. The string ‘{}’ is replaced by the current file name being processed everywhere it occurs in the arguments to the command, not just in arguments where it is alone, as in some versions of find. Both of these constructions might need to be escaped (with a ‘\’) or quoted to protect them from expansion by the shell.

示例

# 查找當(dāng)前目錄下當(dāng)天修改過的txt文件并刪除
find . -maxdepth 1 -type f -name "\*.txt" -mtime -1 -exec rm -rf '{}' \;
# 查找當(dāng)前目錄下近5天內(nèi)修改過的txt文件并拷貝到/tmp目錄下
find . -maxdepth 1 -type f -name "\*.txt" -mtime -5 -exec cp '{}' /tmp/ \;

Notice that the braces are enclosed in single quote marks to protect them from interpretation as shell script punctuation. The semicolon is similarly protected by the use of a backslash, though single quotes could have been used in that case also.

注意:cp、mv不能直接使用xargs。
示例

$ find /foot/bar/ -name '*.csv' -print0 | xargs -0 mv -t some_dir

此處的xargs將會(huì)構(gòu)建如下命令:

$ mv 1.csv 2.csv 3.csv ... -t some_dir

如果直接使用cp或mv,會(huì)導(dǎo)致目標(biāo)目錄無法匹配,因此,需使用-t指定目標(biāo)目錄

二、sed

Vim 采用的是交互式文本編輯模式,可以用鍵盤命令來交互性地插入、刪除或替換數(shù)據(jù)中的文本。但 sed 命令不同,它采用的是流編輯模式,最明顯的特點(diǎn)是,在 sed 處理數(shù)據(jù)之前,需要預(yù)先提供一組規(guī)則,sed 會(huì)按照此規(guī)則來編輯數(shù)據(jù)。

vim 中一些常用操作:

  • gg(命令模式下跳轉(zhuǎn)文件開頭)
  • G(命令模式下跳轉(zhuǎn)文件結(jié)尾)
  • :%s/vivian/sky/替換每一行的第一個(gè) vivian 為 sky(底線命令模式)
  • :%s/vivian/sky/g替換每一行中所有 vivian 為 sky(底線命令模式)

sed 會(huì)根據(jù)腳本命令來處理文本文件中的數(shù)據(jù),這些命令要么從命令行中輸入,要么存儲(chǔ)在一個(gè)文本文件中,此命令執(zhí)行數(shù)據(jù)的順序如下:

  1. 每次僅讀取一行內(nèi)容;
  2. 根據(jù)提供的規(guī)則命令匹配并修改數(shù)據(jù)。注意,sed 默認(rèn)不會(huì)直接修改源文件數(shù)據(jù),而是會(huì)將數(shù)據(jù)復(fù)制到緩沖區(qū)中,修改也僅限于緩沖區(qū)中的數(shù)據(jù);
  3. 將執(zhí)行結(jié)果輸出。

當(dāng)一行數(shù)據(jù)匹配完成后,它會(huì)繼續(xù)讀取下一行數(shù)據(jù),并重復(fù)這個(gè)過程,直到將文件中所有數(shù)據(jù)處理完畢。

1. 常用命令選項(xiàng)

默認(rèn)情況下,sed 會(huì)在所有的腳本指定執(zhí)行完畢后,會(huì)自動(dòng)輸出處理后的內(nèi)容。

命令選項(xiàng):

  • -i:此選項(xiàng)會(huì)直接修改源文件,要慎用。
  • -n:默認(rèn)情況下,sed 會(huì)在所有的腳本指定執(zhí)行完畢后,會(huì)自動(dòng)輸出處理后的內(nèi)容,而該選項(xiàng)會(huì)屏蔽啟動(dòng)輸出,需使用 print 命令來完成輸出。
  • -e:該選項(xiàng)會(huì)將其后跟的腳本命令添加到已有的命令列表中,即可以通過-e參數(shù)指定多個(gè)命令內(nèi)容。

2. 常用動(dòng)作腳本命令

2.1 s 替換

此命令的基本格式為:

[address]s/pattern/replacement/flags

其中,address 表示指定要操作的具體行,pattern 指的是需要替換的內(nèi)容,replacement 指的是要替換的新內(nèi)容。

此命令中常用的 flags 標(biāo)記如表所示

flags 標(biāo)記 功能
n 1~512 之間的數(shù)字,表示指定要替換的字符串出現(xiàn)第幾次時(shí)才進(jìn)行替換,例如,一行中有 3 個(gè) A,但用戶只想替換第二個(gè) A,這是就用到這個(gè)標(biāo)記;
g 對(duì)數(shù)據(jù)中所有匹配到的內(nèi)容進(jìn)行替換,如果沒有 g,則只會(huì)在第一次匹配成功時(shí)做替換操作。例如,一行數(shù)據(jù)中有 3 個(gè) A,則只會(huì)替換第一個(gè) A;
p 會(huì)打印與替換命令中指定的模式匹配的行。此標(biāo)記通常與 -n 選項(xiàng)一起使用。

示例

sed 's/192/10/g' test.txt  # 把文件里面的192字符替換為10,不修改原文件,替換結(jié)果輸出到終端
sed -i 's/192/10/g' test.txt  # 把文件里面的192字符替換為10,修改原文件
2.2 已匹配字符串標(biāo)記&

& 表示已匹配的字符串標(biāo)記

示例

sed 's/^/& /g' test.txt   # 在每行行首增加一個(gè)空格
sed 's/$/& id /g' test.txt   # 在每行末尾增加一個(gè)id字符串
2.3 在當(dāng)前行前后插入文本 a\ 和 i\

a 命令表示在指定行的后面附加一行,i 命令表示在指定行的前面插入一行,它們的基本格式完全相同,如下所示:

[address]a(或 i)\新文本內(nèi)容

a\ 和 i\ 后面的\可以省略

示例

sed '/^test/a\this is a test line' file	# 在file文件以 test 開頭的行后面追加一行文本
sed '/^test/i\this is a test line' file # 在file文件以 test 開頭的行前面插入一行文本
2.4 p 打印指定行

p 命令表示搜索符號(hào)條件的行,并輸出該行的內(nèi)容,此命令的基本格式為:

[address]p

示例

sed -n '/xxx/p' test.txt

用 -n 選項(xiàng)和 p 命令配合使用,可以禁止輸出其他行,只打印包含匹配文本模式的行。

2.5 匹配行的方式

默認(rèn)情況下,sed 命令會(huì)作用于文本數(shù)據(jù)的所有行。如果只想將命令作用于特定行或某些行,則必須寫明 address 部分,表示的方法有以下 2 種:

  1. 以數(shù)字形式指定行區(qū)間;
  2. 用文本模式指定具體行區(qū)間。
2.5.1 以數(shù)字形式指定行區(qū)間

sed 會(huì)將文本流中的第一行編號(hào)為 1,然后繼續(xù)按順序?yàn)榻酉聛淼男蟹峙湫刑?hào)。
在腳本命令中,指定的地址可以是單個(gè)行號(hào),或是用起始行號(hào)、逗號(hào)以及結(jié)尾行號(hào)指定的一定區(qū)間范圍內(nèi)的行。

示例

sed -n '1p' test.txt  # 打印第一行
sed -n '1,5p' test.txt  # 打印第1-5行

可以使用分號(hào)來分隔需要指定的多個(gè)行,示例:

sed -n '1p;$p' test.txt  # 打印第一行和最后一行,$符號(hào)映射特殊行——最后一行
2.5.2 用文本模式指定行區(qū)間

sed 允許指定文本模式來過濾出命令要作用的行,格式如下:

/pattern/command

例如想修改用戶 demo 的默認(rèn) shell,可以使用 sed 命令,執(zhí)行命令如下:

sed '/demo/s/bash/csh/' /etc/passwd

輸出指定行:

sed -n '/aaa/p' test.txt 

sort命令用于將文本文件內(nèi)容加以排序。

  • -n 按算術(shù)值對(duì)字段進(jìn)行數(shù)字排序
  • -r 按倒序排序

三、grep

基本格式:

grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

1. 常用選項(xiàng)

常用選項(xiàng)及含義:

  • -v:列出沒有匹配到的行
  • -n:在每一匹配行前列出行號(hào)
  • -E, --extended-regexp:將pattern解釋為擴(kuò)展正則表達(dá)式,即強(qiáng)制grep表現(xiàn)為egrep(grep -E等價(jià)于egrep)

2. 示例

grep -v "^$"   # 排除空行
grep "^10" test.txt  # 匹配以10開頭的
grep "11$" test.txt  # 以11結(jié)尾的
grep "[0-9]" test.txt  # 匹配數(shù)字
grep "[a-z]" test.txt  # 匹配字母

cat -n 打印行號(hào)

egrep選項(xiàng)參數(shù)

  • -o, --only-matching
    只打印匹配行中匹配(非空)的部分,每個(gè)部分在單獨(dú)的輸出行上。

四、awk

和 sed 命令類似,awk 命令也是逐行掃描文件(從第 1 行到最后一行),尋找含有目標(biāo)文本的行,如果匹配成功,則會(huì)在該行上執(zhí)行用戶想要的操作;反之,則不對(duì)行做任何處理。

此命令的設(shè)計(jì)者有 3 位,他們的姓分別是 Aho、Weingberger 和 Kernighan,awk 就取自這 3 為大師姓的首字母。

基本格式:

awk [選項(xiàng)參數(shù)] '腳本命令' 文件名
標(biāo)準(zhǔn)輸出 | awk [選項(xiàng)參數(shù)] '腳本命令'   # 如cat test.txt | awk '{print $1}'

1. 常用選項(xiàng)參數(shù)

常用選項(xiàng)及含義:

  • -F fs:指定以 fs 作為輸入行的分隔符,awk 命令默認(rèn)分隔符為空格或制表符。
  • -v var=value:賦值一個(gè)用戶定義變量,該變量可在腳本命令中使用。

2. 腳本命令

基本格式:

'匹配規(guī)則{執(zhí)行命令}'

這里的匹配規(guī)則,和 sed 命令中的 address 部分作用相同,用來指定腳本命令可以作用到文本內(nèi)容中的具體行,可以使用字符串(比如 /demo/,表示查看含有 demo 字符串的行)或者正則表達(dá)式指定。另外需要注意的是,整個(gè)腳本命令是用單引號(hào)(‘’)括起,而其中的執(zhí)行命令部分需要用大括號(hào)({})括起來。

在 awk 程序執(zhí)行時(shí),如果沒有指定執(zhí)行命令,則默認(rèn)會(huì)把匹配的行輸出;如果不指定匹配規(guī)則,則默認(rèn)匹配文本中所有的行。

3. 腳本命令中常見的內(nèi)建變量

默認(rèn)情況下,awk 會(huì)將如下變量分配給它在文本行中發(fā)現(xiàn)的數(shù)據(jù)字段:

  • $0 代表整個(gè)文本行;
  • $n 代表文本行中的第 n 個(gè)數(shù)據(jù)字段,字段間由FS分隔。

其他內(nèi)建變量:

  • FS 字段分隔符(默認(rèn)是任何空格)
  • NF 一條記錄的字段的數(shù)目,$NF表示匹配文本行的最后一個(gè)字段
  • NR 已經(jīng)讀出的記錄數(shù),就是行號(hào),從1開始

4. 實(shí)例

awk '{print $1}' test.txt  # 打印第一列
awk '{print $NF}' test.txt  # 打印最后一列
awk -F: '{print $1}' /etc/passwd  # 以:作為分隔符打印第一列,取出系統(tǒng)用戶名
awk '{print "01: "$NF}' test.txt # 打印最后一列,awk中可以使用""添加輸出內(nèi)容

df -h 查看磁盤占用的空間文章來源地址http://www.zghlxwxcb.cn/news/detail-705929.html

到了這里,關(guān)于【Linux編程Shell自動(dòng)化腳本】03 shell四劍客(find、sed、grep、awk)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • shell腳本——服務(wù)器巡檢(自動(dòng)化運(yùn)維)

    ?目的? ?自動(dòng) 獲取集群內(nèi) 多個(gè)主機(jī) 的內(nèi)存、磁盤、cpu等信息 生成日志 ?準(zhǔn)備? ? VMware虛擬主機(jī)IP在同一個(gè)網(wǎng)段(互相能ping通) ? ? ? ? ? ? 虛擬主機(jī)都有公鑰免登錄 ???????????修改主機(jī)IP? vi/etc/sysconfig/netwoek-scripts/ifcfg-ens160 ? ? ? ? ? ?設(shè)置主機(jī)名?hostnamectl set-ho

    2024年02月15日
    瀏覽(40)
  • ansible相比shell腳本自動(dòng)化有什么優(yōu)勢(shì)

    Ansible自動(dòng)化與Shell腳本自動(dòng)化相比,具有以下幾個(gè)顯著的優(yōu)勢(shì): 輕量級(jí)與無需代理 :Ansible的一個(gè)關(guān)鍵優(yōu)勢(shì)在于其輕量級(jí)和無需在被控制服務(wù)器上安裝任何代理或客戶端的特點(diǎn)。這極大地簡化了部署和維護(hù)的流程,降低了復(fù)雜性和出錯(cuò)的可能性。而Shell腳本通常需要在每臺(tái)服

    2024年04月25日
    瀏覽(32)
  • Shell腳本入門實(shí)戰(zhàn):探索自動(dòng)化任務(wù)與實(shí)用場景

    引言 Shell腳本作為一種強(qiáng)大的自動(dòng)化工具,在現(xiàn)代操作系統(tǒng)中具有廣泛的應(yīng)用。無論是簡單的文件操作,還是復(fù)雜的系統(tǒng)管理,Shell腳本都能提供高效、快速的解決方案。在本文中,我們將探索Shell腳本的基礎(chǔ)知識(shí),并通過實(shí)戰(zhàn)場景示例,一起深入了解Shell腳本編程。 1. Shell腳

    2024年02月02日
    瀏覽(48)
  • DevOps自動(dòng)化平臺(tái)開發(fā)之 Shell腳本執(zhí)行的封裝

    DevOps自動(dòng)化平臺(tái)開發(fā)之 Shell腳本執(zhí)行的封裝

    基于如下技術(shù)棧開發(fā)DevOps平臺(tái) Spring Boot Shell Ansible Git Gitlab Docker K8S Vue ?1、spring boot starter的封裝使用 2、Shell腳本的編寫 3、Ansible 腳本的編寫 4、Docker 的使用與封裝設(shè)計(jì) 本篇介紹如何使用Java封裝Linux命令和Shell腳本的使用 將其設(shè)計(jì)成spring boot starter maven依賴pom文件 具體的封裝

    2024年02月15日
    瀏覽(21)
  • 簡單的Shell腳本實(shí)現(xiàn)自動(dòng)化構(gòu)建部署-適合前后端分離的小網(wǎng)站

    簡單的Shell腳本實(shí)現(xiàn)自動(dòng)化構(gòu)建部署-適合前后端分離的小網(wǎng)站

    大家在生活中經(jīng)常會(huì)自己寫一點(diǎn)小代碼。然后部署在公有云的服務(wù)器上。但是一般像阿里,騰訊等服務(wù)商,提供的機(jī)器內(nèi)存并不是很大。如果想裝入一個(gè)jenkins之類的服務(wù),會(huì)比較占用CPU和內(nèi)存的資源。但是人手的部署又是比較麻煩的。所以我這里提供了一個(gè)思路,使用shell腳

    2023年04月16日
    瀏覽(29)
  • Shell編程自動(dòng)化之if、for、while和函數(shù)

    一、if語句 1.單分支格式 2.雙分支格式 3.多分支格式 4.實(shí)例測(cè)試 通過ping測(cè)試局域網(wǎng)內(nèi),主機(jī)是否在線 二、for循環(huán) 1.格式 2.實(shí)例測(cè)試 通過ping測(cè)試局域網(wǎng)內(nèi),192.168.2網(wǎng)段全部主機(jī)是否在線,并將是否在線結(jié)果分開存儲(chǔ)到文件。 for_test.sh 三、while循環(huán) 1.格式 2.實(shí)例測(cè)試 continue表示

    2024年01月16日
    瀏覽(22)
  • Latex圖表制作:關(guān)于EPS文件轉(zhuǎn)PDF文件及PDF裁剪自動(dòng)化的Shell腳本制作

    Latex圖表制作:關(guān)于EPS文件轉(zhuǎn)PDF文件及PDF裁剪自動(dòng)化的Shell腳本制作

    很快就要步入研二了,在寫完一篇論文以后,即將進(jìn)入第二篇論文寫作時(shí),察覺到之前的一篇論文還有許多可以改進(jìn)的地方,一個(gè)方面就是繪圖,一篇論文圖畫的好不好、能否吸引審稿人的眼球并獲得其青睞是一個(gè)值得琢磨的問題,而在這種收益和付出正相關(guān)的事情上,就更

    2024年02月09日
    瀏覽(27)
  • Liunx shell編程及自動(dòng)化運(yùn)維實(shí)現(xiàn)--第五章三劍客

    Liunx shell編程及自動(dòng)化運(yùn)維實(shí)現(xiàn)--第五章三劍客

    正則表達(dá)式(RE)是一種字符模式,用于再查找過程中匹配指定的字符,在大多數(shù)程序中,正則表達(dá)式都被置于兩個(gè)正斜杠之間:例如//就是由正斜杠界定的正則表達(dá)式,他將匹配被查找的行中任何位置出現(xiàn)的相同模式。在正則表達(dá)式中,元字符時(shí)最重要的概念。 定義:元字

    2024年02月21日
    瀏覽(24)
  • 利用Figlet工具創(chuàng)建酷炫Linux Centos8服務(wù)器-登錄歡迎界面-SHELL自動(dòng)化編譯安裝代碼

    利用Figlet工具創(chuàng)建酷炫Linux Centos8服務(wù)器-登錄歡迎界面-SHELL自動(dòng)化編譯安裝代碼

    因?yàn)槲覀冃枰尚枰奶囟ㄗ址?,所以需要在?dāng)前服務(wù)器中安裝Figlet,默認(rèn)沒有安裝包的,其實(shí)如果我們也只要在一臺(tái)環(huán)境中安裝,然后需要什么字符只要復(fù)制到需要的服務(wù)器中,并不需要所有都安裝。同樣的,我們也可以利用此生成的字符用到腳本運(yùn)行的開始起頭部分,

    2024年02月12日
    瀏覽(30)
  • 【shell】交互式自動(dòng)化執(zhí)行命令

    sftp 登陸并傳輸文件時(shí)需要手動(dòng)輸入密碼 通過 expect 腳本模擬用戶輸入來與命令交互, 根據(jù)命令的輸出提示, 來執(zhí)行相應(yīng)的操作, 來實(shí)現(xiàn)自動(dòng)化 expect 給變量賦值用 set 變量名 \\\"變量值\\\" 獲取今天 : set today [clock format [clock seconds] -format %Y-%m-%d] 獲取昨天 : set yesterday [clock format [expr

    2024年02月09日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包