Linux筆記13——shell編程基礎-7

補充

1.printf '%s\t%s' 字符串 中,\t一定不要加雙引號,這一點和在awk中使用的時候有所不同

2.其中%s也可以寫成%ns,n可以被用來設置列寬,默認右對齊

#打印輸出文件系統的使用情況
[root@localhost ~]# printf '%-30s\t%s\n' $(df -h | awk '{print $1"\t"$(NF-1)}')
文件系統                  	已用%
devtmpfs                     0%
tmpfs                        0%
tmpfs                        3%
/dev/nvme0n1p3               11%
/dev/nvme0n1p1               13%
tmpfs                        0%
或
[root@localhost ~]# df -h | awk '{printf "%-20s\t%s\n",$1,$(NF-1)}'
文件系統                	已用%
devtmpfs            	0%
tmpfs               	0%
tmpfs               	3%
/dev/nvme0n1p3      	11%
/dev/nvme0n1p1      	13%
tmpfs               	0%

3.若想要在包含匹配中調用變量,則需要使用單引號

[root@localhost ~]# awk '$2~/[un]/{print $0}' cut.txt 
1	xqian	83	75	93
2	xsun 	74	96	63
[root@localhost ~]# name=un[root@localhost ~]# awk '$2~/['$name']/{print $0}' cut.txt 
1	xqian	83	75	93
2	xsun 	74	96	63#若使用雙引號則沒有任何用處
[root@localhost ~]# awk '$2~/["$name"]/{print $0}' cut.txt 
0	xzhao	95	59	78
1	xqian	83	75	93
2	xsun 	74	96	63

4.若內存使用率超過15%,則打印紅色的內存超標,當前使用率是多少

[root@localhost ~]# free -htotal        used        free      shared  buff/cache   available
Mem:           1.9Gi       419Mi       1.2Gi       7.0Mi       455Mi       1.5Gi
Swap:          2.0Gi          0B       2.0Gi
[root@localhost ~]# cat jiance.sh 
#!/bin/bash
mem=$(printf '%.f\n' $(free | awk '/Mem/{print $3/$2*100}'))
[ $mem -gt 15 ] && echo -e "\e[31m內存超標,當前使用率是$mem%\e[0m" 
[root@localhost ~]# bash jiance.sh 
內存超標,當前使用率是22%
[root@localhost ~]# 

5.取總的cpu使用率

[root@localhost ~]# top -n 1 | awk '/%Cpu/{printf "%.f\n",$2+$4}'
3

sed命令

功能:實現非交互式對文件進行選取、替換、刪除、新增等操作的命令,即不進入文本對其內容進行修改;主要包括讀取、執行和顯示三個過程

格式:sed [選項]? '動作'? 文件名

選項

  • -n:將經過處理后的數據輸出到控制臺上;不加-n輸入全文+指定行
  • -i:直接修改文件內容;默認下sed不會對文件直接修改,而是在內存中修改并將結果顯示在控制臺

動作

  • p:打印,輸出指定行
  • a:追加,在當前行后追加一行或多行
  • i:插入,在當前行前插入一行或多行
  • d:刪除,刪除指定的一行或多行
  • c:整行替換,用c后面的字符串替換元數據指定行的數據
  • s:字符替換,用一個字符串替換另外一個字符串,格式“行范圍s/舊字符/新字符/g”

數據準備

[root@localhost ~]# cat cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xqian	83	75	93
2	xsun 	74	96	63

查看

1.顯示cut.txt中第三行的信息
[root@localhost ~]# sed '3p' cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xqian	83	75	93
1	xqian	83	75	93
2	xsun 	74	96	63[root@localhost ~]# sed -n '3p' cut.txt 
1	xqian	83	75	932.顯示第二行到第四行的信息,查看連續的多行
[root@localhost ~]# sed -n '2,4p' cut.txt 
0	xzhao	95	59	78
1	xqian	83	75	93
2	xsun 	74	96	633.顯示第二行和第四行的信息,查看不連續的多行
[root@localhost ~]# sed -n '2p;4p' cut.txt 
0	xzhao	95	59	78
2	xsun 	74	96	634.查看符合條件的行,支持正則,擴展正則要使用轉義符
[root@localhost ~]# sed -n '/a/p' cut.txt 
0	xzhao	95	59	78
1	xqian	83	75	93[root@localhost ~]# sed -n '/[23]\?/p' cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xqian	83	75	93
2	xsun 	74	96	63
[root@localhost ~]# sed -n '/[23]/p' cut.txt 
1	xqian	83	75	93
2	xsun 	74	96	63

追加

1.追加,不加-i不改變元數據
#在指定行后面追加
[root@localhost ~]# sed '3a 12\txli\t80\t90\t100\t' cut.txt
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xqian	83	75	93
12	xli	80	90	100	
2	xsun 	74	96	63
#在指定行前面追加
[root@localhost ~]# sed '3i 12\txli\t80\t90\t100\t' cut.txt
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
12	xli	80	90	100	
1	xqian	83	75	93
2	xsun 	74	96	632.改變元數據
[root@localhost ~]# sed -i '3i 12\txli\t80\t90\t100\t' cut.txt
[root@localhost ~]# cat cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
12	xli	80	90	100	
1	xqian	83	75	93
2	xsun 	74	96	633.-a和-i可以在指定位置追加多行
[root@localhost ~]# sed '3a 100 zhangsan \n200 lisi' cut.txt
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xqian	83	75	93
100 zhangsan 
200 lisi
2	xsun 	74	96	63

刪除

1.刪除第三行的數據
[root@localhost ~]# sed '3d' cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xqian	83	75	93
2	xsun 	74	96	632.刪除第二行到第四行的數據,刪除多行數據
[root@localhost ~]# sed '2,4d' cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
2	xsun 	74	96	633.刪除第二行和第四行的數據
[root@localhost ~]# sed '2d;4d' cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
12	xli	80	90	100	
2	xsun 	74	96	634.刪除第三行的元數據,加上-i選項才能更改元數據
[root@localhost ~]# sed -i '3d' cut.txt 
[root@localhost ~]# cat cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xqian	83	75	93
2	xsun 	74	96	63

替換

1.將第三行內容整行替換
[root@localhost ~]# sed '3c No such person' cut.txt  
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
No such person
2	xsun 	74	96	632.將第三行中的x替換成xiao
[root@localhost ~]# sed '3s/x/xiao/g' cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
1	xiaoqian	83	75	93
2	xsun 	74	96	633.將所有行中的x替換成xiao
[root@localhost ~]# sed 's/x/xiao/g' cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xiaozhao	95	59	78
1	xiaoqian	83	75	93
2	xiaosun 	74	96	634.將指定的一行內容替換成空
[root@localhost ~]# sed '3s/[0-9]//g' cut.txt
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78xqian			
2	xsun 	74	96	635.同時替換多行,用;隔開
[root@localhost ~]# sed '3s/^/#/g;4s/[0-9]//g' cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
#1	xqian	83	75	93xsun 			6.加上-i選項更改元數據
[root@localhost ~]# sed -i '3s/^/#/g;4s/[0-9]//g' cut.txt 
[root@localhost ~]# cat cut.txt 
ID	NAME	LINUX	MYSQL	DOCKER
0	xzhao	95	59	78
#1	xqian	83	75	93xsun 			

sed命令練習

問題1:關閉selinux

想要關掉selinux,用sed命令修改配置文件

[root@localhost ~]# sed '22s/disabled/enforcing/' /etc/selinux/config 

問題2:校驗整數

接收客戶端輸入,若是純整數則打印是整數,否則打印格式不正確

[root@localhost ~]# cat num.sh 
#!/bin/bash
read -p "please enter a num:" num
jq=$(echo $num | sed 's/[0-9]//g')
[ -z "$jq" ] && echo 是整數 || echo 格式不正確[root@localhost ~]# bash num.sh 
please enter a num:123
是整數[root@localhost ~]# bash num.sh 
please enter a num:12d
格式不正確

問題3:修改網卡配置

用sed命令修改網卡配置文件,進行IP地址獲取方式的切換

1.讀取當前使用的網卡名
[root@localhost ~]# ip add | grep "inet[^6]" | grep -v "127" | awk '{print $NF}'
ens160
2.將較長的配置文件名賦予變量
[root@localhost ~]# interface=`ip add | grep "inet[^6]" | grep -v "127" | awk '{print $NF}'`
[root@localhost ~]# cf="/etc/NetworkManager/system-connections/$interface.nmconnection"
3.查看當前網卡配置,并顯示行號
[root@localhost ~]# cat -n $cf1	[connection]2	id=ens1603	uuid=4c163b33-6eca-3917-b856-9bff2df0e9474	type=ethernet5	autoconnect-priority=-9996	interface-name=ens1607	timestamp=17555496048	9	[ethernet]10	11	[ipv4]12	method=manual13	address=192.168.66.66/24,192.168.66.214	dns=202.106.0.2015	16	[ipv6]17	addr-gen-mode=eui6418	method=auto19	20	[proxy]
4.將ip地址改為手動獲取(真實實驗中需要加-i選項)
[root@localhost ~]# sed '12s/auto/manual/' $cf
5.手動添加ip地址、掩碼、網關和dns(真實實驗中需要加-i選項)
[root@localhost ~]# sed '12a address=192.168.66.66/24,192.168.66.2\ndns=202.106.0.20' $cf

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

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

相關文章

【混合開發】Android+WebView視頻圖片播放硬件加速詳解

webview視頻播放出現白屏、藍屏、花屏、黑屏等等 但由于布局結構是androidwebviewH5本地視頻等。視頻播放導致的異常排查起來十分復雜且沒有原生的相關日志 于是需要給webview播放視頻進行硬件加速,剛開始以為是一件很簡單的配置而已。本著無經驗從頭開始的原則&am…

Allegro-DDR3實戰-差分對-等長設置-區域規則

本章內容: 一)Allegro之DDR3設計 (實操干貨) 二)規則設置具體步驟 DDR3信號表: (eg:鎂光MT41J256M16HA-15E) 數據信號 DQ[15:0] DQS[1:0] DM[1:0] DQ:雙向數據總線 DQS:數據選通,用于同步數據傳…

七牛云OSS空間復制遷移到另外一個空間

創新新的空間時存儲地區必須一致 訪問控制必須選擇公開 1、下載七牛的同步工具并解壓 qshell(http://developer.qiniu.com/docs/v6/tools/qshell.html) 2、解壓文件 3、運行cmd登錄到七牛賬號 qshell account 你的七牛AK 你的七牛SK 你的賬號 4、測…

windows中Qwen3?Coder 與 Claude Code 搭配使用

claude安裝命令 npm install -g anthropic-ai/claude-code環境變量配置 set ANTHROPIC_BASE_URLhttps://dashscope.aliyuncs.com/api/v2/apps/claude-code-proxy set ANTHROPIC_AUTH_TOKENyour-dashscope-apikey可能還需要配置自己的git環境變量 查看git安裝位置 按下Win S打…

thunar 文件管理器實現雙擊使用 nvim打開

archlinux 中thunar 文件管理器,如何實現雙擊使用 nvim打開查看。我用的是kitty 終端。 在 Arch Linux Thunar kitty nvim 的環境里,要實現 雙擊文件 -> 用 nvim 打開,你可以這樣配置:設置為默認應用 如果你想 雙擊直接用 n…

深度學習----卷積神經網絡實現數字識別

一、準備工作 導入庫,導入數據集,劃分訓練批次數量,規定訓練硬件(這部分 import torch from torch import nn # 導入神經網絡模塊 from torch.utils.data import DataLoader # 數據包管理工具,打包數據 from torch…

鴻蒙Harmony-從零開始構建類似于安卓GreenDao的ORM數據庫(四)

目錄 一,查詢表的所有數據 二,根據條件查詢數據 三,數據庫升級 前面章節已經講解了數據庫的創建,表的創建,已經增刪改等操作。下面我們來講解一下數據庫的查詢以及升級操作。 一,查詢表的所有數據 先來看看官方文檔: query(predicates: RdbPredicates, callback: Asy…

20250829_編寫10.1.11.213MySQL8.0異地備份傳輸腳本+在服務器上創建cron任務+測試成功

0.已知前提條件: 10.1.11.213 堡壘機訪問 mysql 8.0 版本 密碼在/root/.my.cnf 備份腳本:/data/backup_mysql/mysql_backup.sh alarm_system:動環數據庫 exit_and_entry:出入境數據庫 logs:備份日志 project_cg_view_prod:采購跟蹤系統 all :數據庫整體備份 imip_ecb…

PostgreSQL 流復制與邏輯復制性能優化與故障切換實戰經驗分享

PostgreSQL 流復制與邏輯復制性能優化與故障切換實戰經驗分享 在高可用和數據安全愈發受到重視的生產環境中,PostgreSQL 復制技術是保障業務連續性的重要手段。本文結合真實生產場景,分享流復制(Physical Replication)與邏輯復制&…

Django開發規范:構建可維護的AWS資源管理應用

引言 在現代Web開發中,遵循一致的開發規范對于項目的可維護性和團隊協作至關重要。本文基于實際的AWS資源管理項目,分享一套經過實踐檢驗的Django開發規范,涵蓋模型設計、Admin配置、管理命令和工具類開發等方面。 模型開發規范 數據模型設計原則 良好的數據模型設計是應…

機器學習可解釋庫Shapash的快速使用教程(五)

文章目錄1 快速使用1.1 安裝1.2 三個簡單步驟快速入門1.2.1 步驟 1:準備模型和數據1.2.2 步驟 2:聲明并編譯 SmartExplainer1.2.3 步驟 3:可視化和探索1.2.4 啟動 Web 應用1.2.5 將解釋結果導出為數據2 Shapash的后端集成2.1 方法一&#xff…

如何在emacs中添加imenu插件

在配置文件中添加: ;; 刪除現有的包管理器配置(如果有),然后添加以下:;; 初始化包管理器 (require package);; 清除現有的倉庫列表 (setq package-archives nil);; 添加正確的倉庫(注意:使用 H…

Linux下的網絡編程SQLITE3詳解

常用數據庫關系型數據庫將復雜的數據結構簡化為二維表格形式大型:Oracle、DB2中型:MySql、SQLServer小型:Sqlite非關系型數據庫以鍵值對存儲,且結構不固定JSONRedisMongoDBsqlite數據庫特點開源免費,C語言開發代碼量少…

適配openai

openai 腳本 stream腳本import os from openai import OpenAIclient OpenAI(base_url"http://127.0.0.1:9117/api/v1",api_keyos.environ["ACCESS_TOKEN"], )stream client.chat.completions.create(model "Qwen/Qwen2-7B-Instruct",messages…

一天認識一個神經網絡之--CNN卷積神經網絡

CNN 是一種非常強大的深度學習模型,尤其擅長處理像圖片這樣的網格結構數據。你可以把它想象成一個系統,它能像我們的大腦一樣,自動從圖片中學習并識別出各種特征,比如邊緣、角落、紋理,甚至是更復雜的物體部分&#xf…

13 SQL進階-InnoDB引擎(8.23)

一、邏輯存儲結構(1)表空間(ibd文件):一個mysql實例可以對應多個表空間,用于存儲記錄、索引等數據。cd /var/lib/mysql(2)段,分為數據段(leaf node segment&a…

MTK Linux DRM分析(二十四)- MTK mtk_drm_plane.c

一、代碼分析 mtk_drm_plane.h 和 mtk_drm_plane.c 兩個文件,并生成基于文本的函數調用圖,我將首先解析文件中的主要函數及其功能,然后根據代碼中的調用關系整理出調用圖。由于文件內容較長,我會專注于關鍵函數及其相互調用關系,并以清晰的文本形式呈現。 文件分析 1. …

滾珠導軌如何賦能精密制造?

在智能制造發展的趨勢下,新興行業對高精度、高穩定性的運動控制需求激增。作為直線傳動領域的“精密紐帶”,滾珠導軌憑借低摩擦、長壽命、高剛性優勢,廣泛應用于精密傳動領域,成為產業升級的關鍵。新能源汽車制造領域:…

醫療 AI 的 “破圈” 時刻:輔助診斷、藥物研發、慢病管理,哪些場景已落地見效?

一、引言在科技迅猛發展的當下,醫療領域正經歷著深刻變革,人工智能(AI)技術宛如一顆璀璨新星,強勢 “破圈” 闖入,為醫療行業帶來了前所未有的機遇與活力。從輔助醫生精準診斷病情,到助力藥企高…

【項目思維】編程思維學習路線(推薦)

本篇博客是一份系統性、分階段的 編程思維學習路線圖推薦,從零基礎小白到系統架構級別,幫助你全面建立和提升編程思維能力。 🚦 階段 0:思維準備(理解編程是什么) 🎯 學習目標: 理…