Shell好用的工具: cut

目標

使用cut可以切割提取指定列\字符\字節的數據

介紹

cut 譯為“剪切, 切割” , 是一個強大文本處理工具,它可以將文本按列進行劃分的文本處理。cut命令逐行讀入文本,然后按列劃分字段并進行提取、輸出等操作。

語法

cut [options]  filename

options參數說明

選項參數功能
-f 提取范圍列號,獲取第幾列
-d 自定義分隔符自定義分隔符,默認為制表符。
-c 提取范圍以字符為單位進行分割
-b 提取范圍以字節為單位進行分割。這些字節位置將忽略多字節字符邊界,除非也指定了 -n 標志。
-n與“-b”選項連用,不分割多字節字符;

提取范圍說明

提取范圍說明
n-提取指定第n列或字符或字節后面所有數據
n-m提取指定第n列或字符或字節到第m列或字符或字節中間的所有數據
-m提取指定第m列或字符或字節前面所有數據
n1,n2,...提前指定枚舉列的所有數據

示例:切割提取指定列數據

cut1.txt文件數據準備

touch cut1.txt

編輯文件添加內容

AA  itxinzhi 11 XX
BB  itcast 22 XXX
CC  Shell 33 XXXX
DD  it 44 XXXXXXX

提取文件中第一列數據

cut cut1.txt -d " " -f 1

提取文件中第一列,第三列, 枚舉查找

cut cut1.txt -d " " -f 1,3

提取文件中第二列,第三列,第四列, 范圍查找

cut cut1.txt -d " " -f 2-5

提取文件中第一列后面所有列的數據

 cut cut1.txt -d " " ?-f 2- 

提起文件中結束列前面所有列的數據

cut -d " " -f -2 cut1.txt
# -2 提取指定列前面所有列數據

運行效果

示例: 切割提取指定字符數據

提取每行前4個字符

cut cut1.txt -c1-4

運行效果

提取每行第4個字符以后的數據

cut cut1.txt -c 4-

運行效果

提取每行第3個字符前面所有字符

cut cut1.txt -c -3

運行效果

示例:切割提取指定字節數據

提取字符串"abc傳智播客" 前3個字節

echo "abc傳智播客" | cut -b -3

運行效果

提取字符串"abc傳智播客" 前4個字節

echo "abc傳智播客" | cut -b -4

運行效果

提取字符串"abc傳智播客" 前6個字節

echo "abc傳智播客" | cut -b -6
# 由于linux系統默認utf-8碼表, 所以一個漢字占3個字節

運行效果

提取字符串"abc傳智播客" 前4個字節, 就可以將漢字 "傳"輸出,

echo "abc傳智播客" | cut -nb -4
#  -n 取消多字節字符分割直接輸出

運行效果

示例:切割提取指定單詞數據

在cut1.txt文件中切割出"AA"

cat cut1.txt | grep itheima | cut -d " " -f 1

示例:切割提取bash進程的PID號

命令

ps -aux | grep 'bash' | head -n 1 | cut -d " " -f 8

運行效果

示例:切割提取IP地址

ifconfig | grep broadcast | cut -d " " -f 10

解決ifconfig

yum search idconfig
yum install net-tools.x86_64
ifconfig

運行效果

小結

cut的作用

一個強大文本處理工具,它可以將文本按列進行劃分的文本處理。cut命令逐行讀入文本,然后按列劃分字段并進行提取、輸出等操作。

cut切割提取列

cut 文件或數據 -d 分隔符切割 -f 提取第X列

cut切割提取字符

cut 文件或數據 -c 提取字符范圍

cut切割提取字節

cut 文件或數據 -nb 提取直接范圍

Shell好用的工具:sed

目標

使用sed編輯文件替換文件中的單詞

編寫在文件中插入或修改行的sed程序

使用sed作為過濾器來過濾管道數據命令

介紹

sed (stream editor, 流編輯器) 是Linux下一款功能強大的非交互流式文本編輯器(vim是交互式文本編輯器),可以對文本文件的每一行數據匹配查詢之后進行增、刪、改、查等操作,支持按行、按字段、按正則匹配文本內容,靈活方便,特別適合于大文件的編輯.

sed是一種流編輯器,它一次處理一行內容, 將這行放入緩存(存區空間稱為:模式空間),然后才對這行進行處理,處理完后,將緩存區的內容發送到終端。

sed處理數據原理

語法

sed [選項參數] [模式匹配/sed程序命令] [文件名]
?
# 模式匹配,sed會讀取每一行數據到模式空間中, 之后判斷當前行是否符合模式匹配要求,符合要求就會
# ? ? 執行sed程序命令, 否則不會執行sed程序命令;如果不寫匹配模式,那么每一行都會執行sex程序命令

選項參數說明

選項參數功能
-e直接在指令列模式上進行sed的動作編輯。它告訴sed將下一個參數解釋為一個sed指令,只有當命令行上給出多個sed指令時才需要使用-e選項;一行命令語句可以執行多條sed命令
-i直接對內容進行修改,不加-i時默認只是預覽,不會對文件做實際修改
-f后跟保存了sed指令的文件
-n取消默認輸出,sed默認會輸出所有文本內容,使用-n參數后只顯示處理過的行
-r ruguler使用擴展正則表達式,默認情況sed只識別基本正則表達式 *

sed程序命令功能描述

命令功能描述
aadd新增,a的后面可以接字串,在下一行出現
cchange更改, 更改匹配行的內容
ddelete刪除, 刪除匹配的內容
iinsert插入, 向匹配行前插入內容
pprint打印, 打印出匹配的內容,通常與-n選項和用
ssubstitute替換, 替換掉匹配的內容
=用來打印被匹配的行的行號
n讀取下一行,遇到n時會自動跳入下一行

特殊符號

命令功能描述
!就像一個sed命令,放在限制條件后面, 對指定行以外的所有行應用命令(取反)
{sed命令1;sed命令2}多個命令操作同一個的行

數據準備

sed.txt文件內容

ABC
itxinzhi itxinzhi
itcast
123
itxinzhi

示例:向文件中添加數據

演示1: 指定行號的前或后面添加數據

向第三行后面添加hello

 sed '3ahello' sed.txt

3 , 代表第三行

a, 代表在后面添加, 出現在下一行

注意這里沒有修改源文件

運行效果

向第三行前面添加hello

 sed '3ihello' sed.txt

3 , 代表第三行

i, 代表在前面添加, 出現在上一行

注意這里沒有修改源文件

運行效果

演示2: 指定內容前或后面添加數據

向內容 itxinzhi后面添加hello,如果文件中有多行包括 ``itxinzhi `,則每一行后面都會添加

sed '/itxinzhi/ahello' sed.txt

運行效果

向內容 itxinzhi 前面添加hello,如果文件中有多行包括 ``itxinzhi `,則每一行前面都會添加

sed '/itxinzhi/ihello' sed.txt

運行效果

演示3: 在最后一行前或后添加hello

在最后一行后面添加hello

sed '$ahello' sed.txt

$a: 最后一行后面添加

運行效果

在最后一行前面添加hello

sed '$ihello' sed.txt

$i: 最后一行前面添加

運行效果

示例: 刪除文件中的數據

演示1: 刪除第2行

命令

sed ?'2d' sed.txt
# d 用于刪除
# 2d 刪除第2行

運行效果

命令: 刪除第1行,第4行數據

sed '1d;4d' sed.txt

運行效果

演示2: 刪除奇數行

從第一行開始刪除,每隔2行就刪掉一行

sed '1~2d' sed.txt
# 1~2 從第1行開始, 每隔2行

運行效果

演示3: 刪除指定范圍的多行數據

刪除從第1行到第3行的數據

sed '1,3d' sed.txt
# 1,3  從指定第1行開始到第3行結束

運行效果

演示3: 刪除指定范圍取反的多行數據

刪除從第1行到第3行取反的數據

sed '1,3!d' sed.txt
# 1,3! 從指定第1行開始到第3行結束取反, 就是不在這個范圍的行

運行效果

演示4: 刪除最后一行

命令

sed ?'$d' ? sed.txt

運行效果

演示5: 刪除匹配itheima的行

命令

sed '/itheima/d' sed.txt

運行效果

演示6: 刪除匹配行到最后一行

刪除匹配itxinzhi行到最后一行 , 命令

sed '/itxinzhi/,$d' sed.txt
# , 代表范圍匹配

運行效果

演示7: 刪除匹配行及其后面一行

刪除匹配itxinzhi行及其后面一行

sed '/itxinzhi/,+1d' sed.txt

運行效果

演示9: 刪除不匹配的行

刪除不匹配 itxinzhi或itcast` 的行

sed '/itxinzhi\|itcast/!d' sed.txt
?
# \| 是正則表達式的或者 這里|需要轉義, 所以為\|
# ! 取反

運行效果

示例:更改文件中的數據

演示1:將文件的第一行修改為hello

命令

sed ?'1chello' ?sed.txt

運行效果

演示2: 將包含itxinzhi的行修改為hello

命令

sed ?'/itxinzhi/chello' sed.txt

運行效果

演示3: 將最后一行修改為hello

命令

sed '$chello' sed.txt

運行效果

演示4: 將文件中的itxinzhi替換為hello

將文件中的itxinzhi替換為hello,默認只替換每行第一個itheima

sed 's/itxinzhi/hello/' ?sed.txt

運行效果

注意 's/itxinzhi/hello/' 最后一個/ 不可少

將文本中所有的itxinzhi都替換為hello, 全局替換

sed 's/itxinzhi/hello/g' ?sed.txt
# g 代表匹配全局所有符合的字符

演示5: 替換后的內容寫入文件

將每行中第二個匹配的itxinzhi替換為hello , 將替換后的內容寫入到sed2.txt文件中

# 第一種方式
sed -n 's/itxinzhi/hello/2pw sed2.txt' sed.txt
# w寫入
# p打印, -n只是獲取
?
# 第二種方式
sed -n 's/itxinzhi/hello/2p ' sed.txt > sed2.txt

運行效果

演示6: 正則表達式匹配替換

匹配有 i 的行,替換匹配行中 t 后的所有內容為空

sed '/i/s/t.*//g' sed.txt
# /t.*/ 表示逗號后的所又內容

運行效果

演示7: 每行末尾拼接test

sed 's/$/& test/' sed.txt
# & 用于拼接

運行效果

演示8: 每行行首添加注釋 #

命令

sed 's/^/#/' sed.txt

運行效果

示例: 查詢文件或管道中的數據

需求1: 查詢含有 itcast 的行數據

命令

sed -n '/itcast/p' sed.txt

運行效果

需求2: 管道過濾查詢

管道查詢所有進程中含有sshd的進程信息命令

 ps -aux | sed -n '/sshd/p'

運行效果

示例: 多個sed程序命令執行

將sed.txt文件中的第1行刪除并將 itxinzhi 替換為 itcast

# 第一種方式, 多個sed程序命令 在每個命令之前使用 -e 參數
sed -e '1d' -e 's/itxinzhi/itcast/g' sed.txt 
?
# 第二種方式
sed ?'1d;s/itxinzhi/itcast/g' sed.txt

運行效果

sed高級用法: 緩存區數據交換

模式空間與暫存空間介紹

  1. 首先需要明白, sed處理文件是逐行處理的, 即讀取一行處理一行,輸出一行;

  2. sed把文件讀出來每一行存放的空間叫模式空間, 會在該空間中對讀到的內容做相應處理;

  3. 此外sed還有一個額外的空間即暫存空間, 暫存空間剛開始里邊只有個空行, 記住這一點;

  4. sed可使用相應的命令從模式空間往暫存空間放入內容或從暫存空間取內容放入模式空間;

    2個緩存空間傳輸數據的目的是為了更好的處理數據, 一會參考案例學習

關于緩存區sed程度命令

命令含義
h模式空間里面的內容復制到暫存空間緩存區(覆蓋方式)
H模式空間里面的內容復制到暫存空間緩存區(追加方式)
g暫存空間里面的內容復制到模式空間緩存區(覆蓋方式)
G暫存空間里面的內容復制到模式空間緩存區(追加方式)
x交換2個空間的內容

示例: 緩存空間數據交換

演示1: 第一行粘貼到最后1行

將模式空間第一行復制到暫存空間(覆蓋方式),并將暫存空間的內容復制到模式空間中的最后一行(追加方式)

sed '1h;$G' sed.txt
# 1h 從模式空間中將第一行數據復制到暫存空間(覆蓋方式)
# $G 將暫存空間中的內容復制到模式空間中最后一行(追加方式)

運行效果

演示2: 第一行刪除后粘貼到最后1行

將模式空間第一行復制到暫存空間(覆蓋方式)并刪除, 最后將暫存空間的內容復制到模式空間中的最后一行(追加方式)

sed '1{h;d};$G' sed.txt
# 1{h;d}對模式空間中的第一行數據同時進行復制到暫存空間(覆蓋方式)和刪除模式空間中的第一行數據

運行效果

演示3: 第一行數據復制粘貼替換其他行數據

將模式空間第一行復制到暫存空間(覆蓋方式), 最后將暫存空間的內容復制到模式空間中替換從第2行開始到最后一行的每一行數據(覆蓋方式)

sed '1h;2,$g' sed.txt

運行命令

演示4: 將前3行數據數據復制粘貼到最后一行

將前3行數據復制到暫存空間(追加方式), 之后將暫存空間的所有內容復制粘貼到模式空間最后一行(追加方式)

sed '1,3H;$G' sed.txt

運行效果

示例: 給每一行添加空行

插入空行

sed G -i sed.txt
# G 每行后面添加一個空行
# -i 修改源文件

運行效果

示例: 刪除所有的空行

命令

sed -i '/^$/d' sed.txt

運行效果

Shell好用的工具:awk

介紹

awk是一個強大的文本分析工具,相對于grep的查找,sed的編輯,awk在其對數據分析并生成報告時,顯得尤為強大簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理, 因為切開的部分使用awk可以定義變量,運算符, 使用流程控制語句進行深度加工與分析。

創始人 Alfred V. Aho、Peter J. Weinberger和Brian W. Kernighan awk由來是姓氏的首字母

語法

awk [options] 'pattern{action}' {filenames}

pattern:表示AWK在數據中查找的內容,就是匹配模式

action:在找到匹配內容時所執行的一系列命令

選項參數說明

選項參數功能
-F指定輸入文件拆分分隔符
-v賦值一個用戶定義變量

awk內置變量

內置變量含義
ARGC命令行參數個數
ARGV命令行參數排列
ENVIRON支持隊列中系統環境變量的使用
FILENAMEawk瀏覽的文件名
FNR瀏覽文件的記錄數
FS設置輸入域分隔符,等價于命令行 -F選項
NF瀏覽記錄的域的個數, 根據分隔符分割后的列數
NR已讀的記錄數, 也是行號
OFS輸出域分隔符
ORS輸出記錄分隔符
RS控制記錄分隔符
$n$0變量是指整條記錄。$1表示當前行的第一個域,$2表示當前行的第二個域,......以此類推。
$NF$NF是number finally,表示最后一列的信息,跟變量NF是有區別的,變量NF統計的是每行列的總數

數據準備

cp /etc/passwd ./

示例 : 默認每行空格切割數據

命令

echo "abc 123 456" | awk '{print $1"&"$2"&"$3}'

運行效果

示例: 打印含有匹配信息的行

搜索passwd文件有root關鍵字的所有行

awk '/root/' passwd
# '/root/' 是查找匹配模式, 沒有action命令, 默認輸出所有符合的行數據

運行效果

示例: 打印匹配行中第7列數據

搜索passwd文件有root關鍵字的所有行, 然后以":"拆分并打印輸出第7列

awk -F: '/root/{print $7}' passwd
# -F: 以':'分隔符拆分每一個列(域)數據

運行效果

示例: 打印文件每行屬性信息

統計passwd: 文件名,每行的行號,每行的列數,對應的完整行內容:

awk -F ':' '{print "文件名:" FILENAME ",行號:" NR ",列數:" NF ",內容:" $0}' passwd
# "文件名:" 用于拼接字符串

運行效果

使用printf替代print,可以讓代碼閱讀型更好

awk -F ':' '{printf("文件名:%5s,行號:%2s, 列數:%1s, 內容:%2s\n",FILENAME,NR,NF,$O)}' passwd
# printf(格式字符串,變量1,變量2,...)
# 格式字符串: %ns 輸出字符串,n 是數字,指代輸出幾個字符, n不指定自動占長度
# 格式字符串: %ni 輸出整數,n 是數字,指代輸出幾個數字
# 格式字符串: %m.nf 輸出浮點數,m 和 n 是數字,指代輸出的整數位數和小數位數。如 %8.2f 代表共輸出 8 位數,其中 2 位是小數,6 位是整數;

運行效果

示例: 打印第二行信息

打印/etc/passwd/的第二行信息

awk -F ':' 'NR==2{printf("filename:%s,%s\n",FILENAME,$0)}' passwd

運行效果

示例: 查找以c開頭的資源

awk過濾的使用, 查找當前目錄下文件名以c開頭的文件列表

ls -a | awk '/^c/'

運行效果

示例: 打印第一列

按照":" 分割查詢第一列打印輸出

awk -F ':' '{print $1}' passwd

運行效果

示例: 打印最后1列

按照":" 分割查詢最后一列打印輸出

awk -F: '{print $NF}' passwd

運行效果

示例: 打印倒數第二列

按照":" 分割查詢倒數第二列打印輸出

 awk -F: '{print $(NF-1)}' passwd# $(NF-N) N是幾, 就是倒數第幾列

運行效果

示例: 打印10到20行的第一列

獲取第10到20行的第一列的信息

awk -F: '{if(NR>=10 && NR<=20) print $1}' passwd

運行效果

示例: 多分隔符使用

"one:two/three"字符串按照多個分隔符":"或者"/" 分割, 并打印分割后每個列數據

echo "one:two/three" | awk -F '[:/]' '{printf("%s\n%s\n%s\n%s\n",$0,$1,$2,$3)}'

運行效果

示例: 添加開始與結束內容

給數據添加開始與結束

echo -e ?"abc\nabc" | awk 'BEGIN{print "開始..."} {print $0} END{print "結束..."}'
?
# BEGIN 在所有數據讀取行之前執行;END 在所有數據執行之后執行。

運行效果

示例 : 使用循環拼接分割后的字符串

"abc itxinzhi itcast 21" 使用空格分割后, 通過循環拼接在一起

 echo "abc itxinzhi ? ? itcast ? 21" | awk -v str="" -F '[ ]+' '{for(n=1;n<=NF;n++){ str=str$n} print str }'# -v 定義變量

運行效果

示例: 操作指定數字運算

將passwd文件中的用戶id增加數值1并輸出

echo "2.1" | awk -v i=1 '{print $0+i}'

運行效果

示例: 切割ip

切割IP

ifconfig | awk '/broadcast/{print}' | awk -F " " '{print $2}'

運行效果

示例: 顯示空行行號

查詢sed.txt中空行所在的行號

sed 'G' sed.txt | awk '/^$/{print NR}'

運行效果

小結

grep , sed ,awk , cut 文本字符串操作四劍客的區別

grep:用于查找匹配的行

cut: 截取數據. 截取某個文件中的列, 重點是按照列分割, 這個命令不適合截取文件中有多個空白字符的字段

sed: 增刪改查數據. sed用于在文件中以行來截取數據進行增\刪\改\查

awk:截取分析數據. 可以在某個文件中是以豎列來截取分析數據, 如果字段之間含有很多空白字符也可以獲取需要的數據, awk是一種語言,可以深入分析文件數據

Shell好用的工具:sort

目標

能夠使用sort對字符串升序或降序排序

能夠使用sort 對數字升序或降序

能夠使用sort 對多列進行排序

介紹

sort命令是在Linux里非常有用,它將文件進行排序,并將排序結果標準輸出或重定向輸出到指定文件。

語法

sort (options) 參數
選項說明
==-n==number,依照數值的大小排序
==-r==reverse, 以相反的順序來排序
==-t 分隔字符==設置排序時所用的分隔字符, 默認空格是分隔符
==-k==指定需要排序的列
-d排序時,處理英文字母、數字及空格字符外,忽略其他的字符。
-f排序時,將小寫字母視為大寫字母
-b忽略每行前面開始出的空格字符
==-o 輸出文件==將排序后的結果存入指定的文件
-u意味著是唯一的(unique),輸出的結果是去完重了的
-m將幾個排序好的文件進行合并

參數:指定待排序的文件列表

數據準備

sort.txt文本文件代碼

張三 30 ?
李四 95 ?
播仔 85 
播仔 85
播仔 86
AA 85
播妞 100

示例1: 數字升序

按照“ ”空格分割后的第2列數字升序排序。

sort -t " " -k2n,2 sort.txt
# -t " " 代表使用空格分隔符拆分列
# -k 2n,2 代表根據從第2列開始到第2列結束進行數字升序, 僅對第2列排序

運行效果

示例2: 數字升序去重

先按照“ ”空格分割后的, 然后,按照第2列數字升序排序, 最后對所有列去重

 sort -t " " -k2n,2 -uk1,2 sort.txt

運行效果

注意: 先排序再去重

示例3: 數字升序去重結果保存到文件

命令

sort -t " " -k2n,2 -uk1,2 -o sort2.txt sort.txt

運行效果

示例4: 數字降序去重

先按照“ ”空格分割后的, 然后,按照第2列數字降序排序, 最后對所有列去重

sort -t " " -k2nr,2 -uk1,2 sort.txt

運行效果

示例5: 多列排序

數據準備sort3.txt

公司A,部門A,3
公司A,部門B,0
公司A,部門C,10
公司A,部門D,9
公司B,部門A,30
公司B,部門B,40
公司B,部門C,43
公司B,部門D,1
公司C,部門A,30
公司C,部門B,9
公司C,部門C,100
公司C,部門D,80
公司C,部門E,60

要求: 以","分割先對第一列字符串升序, 再對第3列數字降序

sort -t "," -k1,1 -k3nr,3 sort3.txt

運行效果

小結

能夠使用sort對字符串升序或降序排序

字符串升序: sort -kstart,end 文件

字符串降序: sort -kstartr,end 文件

能夠使用sort 對數字升序或降序

數字升序: sort -kstartn,end 文件

數字降序: sort -kstartnr,end 文件

能夠使用sort 對多列進行排序

sort -kstart[nr],end -kstart[nr],end ... 文件

面試題:查空行

問題:使用Linux命令查詢file.txt中空行所在的行號

file1.txt數據準備

itxinzhi itxinzhi
?
itcast
123
?
itxinzhi

答案:

awk '/^$/{print NR}' file1.txt

運行效果

面試題:求一列的和

問題:有文件file2.txt內容如下:

張三 40
李四 50
王五 60

使用Linux命令計算第二列的和并輸出

awk '{sum+=$2} END{print "求和: "sum}' file2.txt

運行效果

面試題:檢查文件是否存在

問題:Shell腳本里如何檢查一個文件是否存在?如果不存在該如何處理?

答:

if [ -e /root/file1.txt ]; then ?echo "文件存在"; else echo "文件不存在"; fi

運行效果

面試題:數字排序

問題:用shell寫一個腳本,對文本中無序的一列數字排序

cat file3.txt文件內容

9
8
7
6
5
4
3
2
10
1

sort -n file3.txt | awk '{sum+=$1; print $1} END{print "求和: "sum}'

運行效果

面試題:搜索指定目錄下文件內容

問題:請用shell腳本寫出查找當前文件夾(/root)下所有的文本文件內容中包含有字符”123”的文件名稱?

答:

grep -r "123" /root | cut -d ":" -f 1| sort -u

運行效果

面試題:批量生成文件名

問題: 批量生產指定數目的文件,文件名采用"納秒"命名

答: file4.sh

#!/bin/bash
read -t 30 -p "請輸入創建文件的數目:" n
test=$(echo $n | sed 's/[0-9]//g') #檢測非數字輸入
if [ -n "$n" -a -z "$test" ] #檢測空輸入
thenfor ((i=0;i<$n;i=i+1 ))doname=$(date +%N)[ ! -d ./temp ] && ?mkdir -p ./temptouch "./temp/$name"echo "創建 $name 成功!"doneelseecho "創建失敗"exit 1
fi

運行效果

面試題:批量改名

問題: 將/root/temp目錄下所有文件名重命名為"舊文件名-遞增數字"?

重命名命令

rename 舊文件名 新文件名 舊文件所在位置

腳本代碼file5.sh

#!/bin/bash
filenames=$(ls /root/temp)
number=1
for name in $filenames
doprintf "命令前:%s" ${name}newname=${name}"-"${number}rename $name ${newname} /root/temp/*let number++ #每個改名后的文件名后綴數字加1printf "重命名后:%s \n" ${newname}
done

運行效果

面試題:批量創建用戶

問題: 根據users.txt中提供的用戶列表,一個名一行, 批量添加用戶到linux系統中

已知users.txt數據準備

user1
user2

知識點分析1: 添加用戶命令

useradd 用戶名

知識點分析2: 設置每個用戶密碼默認密碼

echo "123456" | passwd --stdin 用戶名

運行效果

面試題答案: 腳本代碼file6.sh

#!/bin/bash
ULIST=$(cat /root/users.txt) ?##/root/users.txt? 里面存放的是用戶名,一個名一行
for UNAME in $ULIST
douseradd $UNAMEecho "123456" | passwd --stdin $UNAME &>/dev/null[ $? -eq 0 ] && echo "$UNAME用戶名與密碼添加初始化成功!"
done

運行效果

面試題:篩選單詞

問題: 根據給出的數據輸出里面單詞長度大于3的單詞

數據準備

I may not be able to change the past, but I can learn from it.

shell腳本file7.sh

echo "I may not be able to change the past, but I can learn from it." | awk -F "[ ,.]" '{for(i=1;i<NF;i++){ if(length($i)>3){print $i}}}'

運行效果

面試題:單詞及字母去重排序

問題

1、按單詞出現頻率降序排序!
2、按字母出現頻率降序排序!

file8.txt 文件內容

No. The Bible says Jesus had compassion2 on them for He saw them as sheep without a shepherd. They were like lost sheep, lost in their sin. How the Lord Jesus loved them! He knew they were helpless and needed a shepherd. And the Good Shepherd knew He had come to help them. But not just the people way back then. For the Lord Jesus knows all about you, and loves you too, and wants to help you.

按照單詞出現頻率降序

awk -F "[,. ]+" '{for(i=1;i<=NF;i++)S[$i]++}END{for(key in S)print S[key],key}' file8.txt |sort -rn|head

運行效果

按照字符出現頻率降序前10個

awk -F "" '{for(i=1;i<=NF;i++)S[$i]++}END{for(key in S)print S[key],key}' file8.txt |sort -rn|head

運行效果

面試題:MySQL分庫備份

#!/bin/sh
user=root ? ? ?#用戶名
pass=root ? ? ?#密碼
backfile=/root/mysql/backup #備份路徑
[ ! -d $backfile ] && mkdir -p $backfile #判斷是否有備份路徑
cmd="mysql -u$user -p$pass" ?#登錄數據庫
dump="mysqldump -u$user -p$pass " #mysqldump備份參數
dblist=`$cmd -e "show databases;" 2>/dev/null |sed 1d|egrep -v "_schema|mysql"` #獲取庫名列表
echo "需要備份的數據列表:"
echo $dblist
echo "開始備份:"
for db_name in $dblist #for循環備份庫列表
doprintf '正在備份數據庫:%s' ${db_name}$dump $db_name 2>/dev/null |gzip >${backfile}/${db_name}_$(date +%m%d).sql.gz #庫名+時間備份打包至指定路徑下printf ',備份完成\n'
done
echo "全部備份完成!!!"

面試題:MySQL數據庫分庫分表備份

#!/bin/sh
user=root ? ? ?#用戶名
pass=root ? ? ?#密碼
backfile=/root/mysql/backup #備份路徑
[ ! -d $backfile ] && mkdir -p $backfile #判斷是否有備份路徑
cmd="mysql -u$user -p$pass" ?#登錄數據庫
dump="mysqldump -u$user -p$pass " #mysqldump備份參數
dblist=`$cmd -e "show databases;" 2>/dev/null |sed 1d|egrep -v "_schema|mysql"` #獲取庫名列表
echo "需要備份的數據列表:"
echo $dblist
echo "開始備份:"
for db_name in $dblist #for循環備份庫列表
doprintf '正在備份數據庫:%s\n' ${db_name}tables=`mysql -u$user -p"$pass" -e "use $db_name;show tables;" 2>/dev/null|sed 1d`for j in $tablesdoprintf '正在備份數據庫 %s 表 %s ' ${db_name} ${j}$dump -B --databases $db_name --tables $j 2>/dev/null > ${backfile}/${db_name}-${j}-`date +%m%d`.sqlprintf ',備份完成\n'done
?
?printf '數據庫 %s 備份完成\n' ${db_name}
done
echo "全部備份完成!!!"

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697347.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697347.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697347.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

樹中枝繁葉茂:探索 B+ 樹、B 樹、二叉樹、紅黑樹和跳表的世界

歡迎來到我的博客&#xff0c;代碼的世界里&#xff0c;每一行都是一個故事 樹中枝繁葉茂&#xff1a;探索 B 樹、B 樹、二叉樹、紅黑樹和跳表的世界 前言B樹和B樹B樹&#xff08;Binary Tree&#xff09;&#xff1a;B樹&#xff08;B Plus Tree&#xff09;&#xff1a;應用場…

Cobra在ubuntu中設置自動補全

Cobra在ubuntu中設置自動補全 yourprogram指的是你程序&#xff0c;并且必須是使用了Cobra cli bash設置 $ source <(yourprogram completion bash)$ yourprogram completion bash > /etc/bash_completion.d/yourprogramzsh設置 $ echo "autoload -U compinit; …

Linux之用戶和用戶組用戶賬號系統文件

一、簡介 1.用戶的定義 在linux系統中用戶&#xff08;User&#xff09;需要用用戶賬號來訪問系統&#xff0c;服務和信息&#xff0c;系統中的每個進程&#xff08;運行的程序&#xff09;都是使用一個特定的用戶運行。每個文件都屬于一個特定的用戶所有。對文件和目錄的訪…

STM32Cubemx TB6612直流電機驅動

一、TB6612FNG TB6612是一個支持雙電機的驅動模塊&#xff0c;支持PWM調速。PWMA、AIN1、AIN2 為一組控制引腳&#xff0c;PWMA 為 PWM 速度控制引腳&#xff0c;AIN1、AIN2 為方向控制引腳&#xff1b;PWMB、BIN1、BIN2 為一組控制引腳&#xff0c;PWMB 為 PWM 速度控制引腳&…

【力扣hot100】刷題筆記Day11

前言 科研不順啊......又不想搞了&#xff0c;隨便弄弄吧&#xff0c;多花點時間刷題&#xff0c;今天開啟二叉樹&#xff01; 94. 二叉樹的中序遍歷 - 力扣&#xff08;LeetCode&#xff09; 遞歸 # 最簡單遞歸 class Solution:def inorderTraversal(self, root: TreeNode) …

idea運行項目時右下角彈出“Lombok requires enabled annotation processing”

文章目錄 錯誤描述原因分析解決方式參考 錯誤描述 Lombok requires enabled annotation processing&#xff1a;翻譯過來就是Lombok 需要啟用注釋處理 原因分析 idea安裝了Lombok插件&#xff0c;但有些設置未做。 解決方式 參考 idea配置和使用Lombok

全文搜索的工作原理講解

Elasticsearch全文搜索是一種強大的搜索技術&#xff0c;它基于Lucene構建&#xff0c;能夠處理大規模數據集&#xff0c;提供快速、準確的搜索結果。要充分利用Elasticsearch的全文搜索能力&#xff0c;關鍵在于理解和應用其核心組件&#xff1a;分詞&#xff08;Tokenization…

【FPGA】高云FPGA之數字鐘實驗->HC595驅動數碼管

高云FPGA之IP核的使用 1、設計定義2、設計輸入2.1 數碼管譯碼顯示2.2 74HC595驅動2.3 主模塊設計 3、分析和綜合4、功能仿真6.1 hex8模塊仿真6.2 HC595模塊 5、布局布線6、時序仿真7、IO分配以及配置文件&#xff08;bit流文件&#xff09;的生成8、配置&#xff08;燒錄&#…

代碼檢測規范和git提交規范

摘要&#xff1a;之前開發的項目&#xff0c;代碼檢測和提交規范都是已經配置好的&#xff0c;最近自己新建的項目就記錄下相關配置過程。 1. ESlint配置 2013年6月創建開源項目&#xff0c;提供一個插件化的JavaScript代碼檢測工具&#xff0c;創建項目是生成的eslintrc.js文…

【算法分析與設計】

&#x1f4dd;個人主頁&#xff1a;五敷有你 &#x1f525;系列專欄&#xff1a;算法分析與設計 ??穩中求進&#xff0c;曬太陽 題目 編寫一個函數&#xff0c;輸入是一個無符號整數&#xff08;以二進制串的形式&#xff09;&#xff0c;返回其二進制表達式中數字位…

如何使用Express框架構建一個簡單的Web應用

在這個數字化時代&#xff0c;Web應用的需求越來越多樣化和復雜化。在前端開發領域&#xff0c;Express框架作為一個快速、靈活的Node.js Web應用程序框架&#xff0c;擁有強大的功能和豐富的生態系統&#xff0c;深受開發者們的青睞。本篇博客將帶您一步步探索如何使用Express…

AUTOSAR汽車電子嵌入式編程精講300篇-基于深度學習的車載總線網絡入侵檢測

目錄 前言 國內外研究現狀 汽車 CAN 網絡攻擊現狀 2 汽車 CAN 總線介紹及信息安全問題分析</

MR混合現實情景實訓教學系統在高空作業課堂中的應用

高空作業是一項高風險的工作&#xff0c;對于從業者來說&#xff0c;不僅需要具備專業的技能&#xff0c;還需要有豐富的實踐經驗。然而&#xff0c;傳統的課堂教學往往只能通過理論講解和模擬訓練來傳授知識&#xff0c;無法提供真實的實踐環境。而MR混合現實情景實訓教學系統…

Alias許可分析中的數據可視化

Alias許可分析中的數據可視化&#xff1a;引領企業洞察合規之道的明燈 在信息化時代&#xff0c;數據可視化已成為各行各業的重要工具&#xff0c;能夠幫助用戶直觀地理解和分析復雜的數據。在Alias許可分析中&#xff0c;數據可視化同樣發揮著至關重要的作用&#xff0c;為企…

【小程序】應用程序編程接口匯總——授權API、OTA API、家庭API

授權API ty.authorize 權限請求方法 需引入BaseKit&#xff0c;且在>1.2.10版本才可使用 參數 Object object 屬性類型默認值必填說明scopestring是scope 權限名稱 舉例子&#xff1a; scope.bluetooth 藍牙權限 scope.writePhotosAlbum 寫入相冊權限 scope.userLocatio…

知乎高贊回復合集,句句道出生活的真相

1. 怎么定義“想清楚了”&#xff1f; “想清楚了”就是以后出了什么問題&#xff0c;你只能找個沒人的地方抽自己&#xff0c;再也不能抱怨別人了。 2. “別讓孩子輸在起跑線上”有道理嗎&#xff1f; 一輩子都要和別人去比較&#xff0c;是人生悲劇的源頭。 3. 太在乎自己…

鴻蒙OS運行報錯 ‘ToDoListItem({ item })‘ does not meet UI component syntax.

在學習harmonyOS時&#xff0c;原本是好好運行的。但是突然報錯 ToDoListItem({ item }) does not meet UI component syntax. 一臉懵逼&#xff0c;以為是自己語法問題檢查了半天也沒問題。 網上搜索了一下&#xff0c;說把多余的js\map文件刪除就行 才發現我的 鴻蒙的開…

Bert基礎(四)--解碼器(上)

1 理解解碼器 假設我們想把英語句子I am good&#xff08;原句&#xff09;翻譯成法語句子Je vais bien&#xff08;目標句&#xff09;。首先&#xff0c;將原句I am good送入編碼器&#xff0c;使編碼器學習原句&#xff0c;并計算特征值。在前文中&#xff0c;我們學習了編…

代碼隨想錄算法訓練營第四十天|343. 整數拆分、96. 不同的二叉搜索樹。

343. 整數拆分 題目鏈接&#xff1a;整數拆分 題目描述&#xff1a; 給定一個正整數 n &#xff0c;將其拆分為 k 個 正整數 的和&#xff08; k > 2 &#xff09;&#xff0c;并使這些整數的乘積最大化。 返回 你可以獲得的最大乘積 。 解題思路&#xff1a; 1、確定dp數組…

flink內存管理,設置思路,oom問題,一文全

flink內存管理 1 內存分配1.1 JVM 進程總內存&#xff08;Total Process Memory&#xff09;1.2 Flink 總內存&#xff08;Total Flink Memory&#xff09;1.3 JVM 堆外內存&#xff08;JVM Off-Heap Memory&#xff09;1.4 JVM 堆內存&#xff08;JVM Heap Memory&#xff09;…