一、grep
1.過濾
ps -ef | grep linux
2.篩選工具
1.查詢/etc/passwd文件中包含root的行
grep root passwd
2.查詢包含root的行,並使關鍵詞顯色
grep --color=auto root passwd
3.查詢/etc/passwd文件中包含root的行並顯示行號
grep -n root passwd
4.查詢/etc/passwd文件中包含root的行,顯示行號,並且忽略大小寫
grep -ni root passwd
5.查詢以root開頭的行
grep -ni ^root passwd
6.查詢以root結尾的行
grep -ni root$ passwd
7.查詢不宜root開頭的行,(-v:表示取反)
grep -niv ^root passwd
(參數 -A:after, -B:before, -C:context,前后文)
8.查詢以ftp開頭的行及其后三行
grep -nA 3 ftp passwd
9.查詢以ftp開頭的行及其前三行
grep -nB 3 ftp passwd
10.查詢以ftp開頭的行及其前后三行
grep -nC 3 ftp passwd
11.顯示沒有空行的文件內容
grep -v ^$ filename
二、cut
cut是列截取命令
1.語法和選項
cut [選項] 文件名
-c:以字符為單位進行分割,截取
-d:自定義分隔符,默認為制表符\t
-f:與-d一起使用,指定截取哪個區域
2.用例
1.截取第一列數據
cut -d: -f1 passwd
2.截取頭十行第一列和第七列的數據
cut -d: -f1,7 passwd | head
3.截取每行前5個字符
cut -c1-5 passwd
4.截取每行第10個字符及以后內容
cut -c10- passwd
5.截取每行第5到第10個字符
cut -c5-10 passwd
小練習
用grep和cut列出當前系統的運行級別
1.如何查看系統運行級別
-
命令 runlevel
-
文件 /etc/inittab(ContOS7中該文件沒有可修改內容)
1.截取結果的第三個字符
runlevel | cut -c3
2. 以空格分割結果,區第二列
runlevel | cut -d ' ' -f2
3.獲取不已#開頭的數據,以冒號分割,去第二列
grep -v ^# /etc/inittab | cut -d: -f2
4.獲取以id開頭的數據,以冒號分割,取第二列
grep ^id /etc/inittab | cut -d: -f2
5.獲取以"initdefault:"結尾的數據,取第4個字符
grep initdefault:$ /etc/inittab | cut -c4
6.獲取每行第4個字符,查看最后一行
cut -c4 /etc/inittab | tail -1
三、sort
sort用於排序,它將文件的每一行作為一個單位,從首字符向后,依次按ASCII碼值進行比較,最后將它們按升序輸出
1.語法和選項
-u:去除重復行
-r:降序排列,默認是升序
-o:將排序結果輸出到文件中,類似重定向符號">"
-n:以數字排序,默認是按字符排序
-t:分隔符
-k:第N列
-b:忽略前導空格
-R:隨機排序,每次運行的結果均不同
1.數字排列以冒號分割的第三列數據
sort -n -t: -k3 passwd
2.數字排列以冒號分割的第三列數據,降序輸出
sort -nr -t: -k3 passwd
3.數字排列以冒號分割的第三列數據,降序輸出到1.txt文件中
sort -nr -t: -k3 passwd -o 1.txt
4.去重文件1.txt
sort -u 1.txt
四、uniq
uniq用於去除連續的重復行
1.常用選項
-i:忽略大小寫
-c:統計重復行次數
-d:只顯示重復行
tee是從標准輸入讀取並寫入到標准輸出和文件,即:雙向覆蓋重定向(屏幕輸出|文本輸入)
1.選項
-a:雙向追加重定向
1.屏幕打印hello並輸入到1.txt文件
echo hello | tee 1.txt
2.屏幕打印hello word並覆蓋到1.txt文件
echo hello world | tee 1.txt
3.屏幕打印HELLO並追加到1.txt文件
echo HELLO | tee -a 1.txt
六、diff
diff工具用於逐行比較文件的不同
注意:diff描述兩個文件不同的方式是,怎樣改變第一個文件之后與第二個文件匹配
1.語法和選項
diff [選項] 文件1 文件2
-b 不檢查空格
-B 不檢查空白行
-i 不檢查大小寫
-W 忽略所有的空格
--normal 正常格式顯示(默認)
-c 上下文格式顯示
-u 合並格式顯示
2.用例
1.准備文件
[root@shell test]# cat file1
aaaa
111
hello world
222
333
bbb
[root@shell test]#
[root@shell test]# cat file2
aaa
hello
111
222
bbb
333
world
[root@shell test]# diff file1 file2
1c1,2 第一個文件的第1行需要改變(c=change)才能和第二個文件的第1到第2行匹配
< aaaa 小於號"<"表示左邊文件(file1)文件內容
--- ---表示分隔符
> aaa 大於號">"表示右邊文件(file2)文件內容
> hello
3d3 第一個文件第3行刪除(d=delete)后才能和第二個文件的第3行匹配
< hello world
5d4 第一個文件第5行刪除(d=delete)后才能和第二個文件的第4行匹配
< 333
6a6,7 第一個文件第6行增加(a=add)內容后才能和第二個文件的第6到第7行匹配
> 333 需要增加的內容在第二個文件里是333和world
> world
[root@shell test]# diff -c file1 file2
前兩行比較文件名和時間戳,***表示file1,---表示file2
*** file1 2022-02-23 14:54:24.365107949 +0800
--- file2 2022-02-23 14:54:57.625110667 +0800
*************** 表示分隔符
*** 1,6 **** file1的1到6行
! aaaa !表示該行需要修改才與第二個文件匹配
111
- hello world -表示該行需要刪除才與第二個文件匹配
222
- 333 -表示該行需要刪除才與第二個文件匹配
bbb
--- 1,7 ----
! aaa 表示第一個文件需要修改才與第二個文件匹配
! hello 表示第一個文件需要修改才與第二個文件匹配
111
222
bbb
+ 333 表示第一個文件需要增加該行才與第二個文件匹配
+ world 表示第一個文件需要增加該行才與第二個文件匹配
[root@shell test]# diff -u file1 file2
--- file1 2022-02-23 14:54:24.365107949 +0800
+++ file2 2022-02-23 14:54:57.625110667 +0800
@@ -1,6 +1,7 @@
-aaaa file1刪除該行
+aaa file1增加該行
+hello file1增加該行
111
-hello world file1刪除該行
222
-333 file1刪除該行
bbb
+333 file1增加該行
+world file1增加該行
1.先找出文件的不同,然后輸出到一個文件
diff -u file1 file2 > file.patch
2.將不同內容打補丁到文件
patch file1 file.patch
3.測試驗證
diff file1 file2
七、paste
用於合並文件行,不更改原文件
1.常用選項
-d:自定義間隔符,默認是tab
-s:串行處理,非並行
[root@shell test]# cat -n file1
1 hello world
2 8888
[root@shell test]# cat -n file2
1 heima itcast
2 999
3 oooo
1.無選項
[root@shell test]# paste file1 file2
hello world heima itcast
8888 999
oooo
2.-d
[root@shell test]# paste -d: file1 file2
hello world:heima itcast
8888:999
:oooo
3.-s
[root@shell test]# paste -s file1 file2
hello world 8888
heima itcast 999 oooo
tr用於字符轉換、替換和刪除,主要用於刪除文件中控制字符或進行字符轉換
注意:文件內容不發生改變
1.語法選項
語法:
用法1:命令執行結果交予tr處理,str1用於查詢,str2用於轉換處理
commands | tr 'str1' 'str2'
用法2:tr處理的內容來自文件,需要使用"<"標准輸入
tr 'str1' 'str2' < filename
用法3:匹配str1進行刪除操作
tr options 'str1' < filename
選項:
-d:刪除str1中所有輸入字符
-s:刪除所有重復出現字符序列,只保留第一個;即將重復出現字符串壓縮為一個字符串
1.將1.txt文件中的小寫字母換成大寫字母
tr a-z A-Z < 1.txt
2.將1.txt文件中所有數字替換成@符號
tr 0-9 @ < 1.txt
3.將1.txt文件中的":"和"/"替換成"#"
tr ':/' '#' < 1.txt
4.去除文件中的小寫字母
tr -d a-z < 1.txt