linux的學習(七):讀取,函數,正則表達式,文本處理工具cut和awk

##簡介
shell編程中的讀取,函數,正則表達式,文本處理工具的簡單使用

read

read:讀取控制臺的輸入
參數:

  • -p:指定讀取時的提示符
  • -t:等待讀取的時間

腳本例子

編寫i.sh腳本,enter your name:提示用戶在控制臺輸入,如果5秒未輸入自動執行退出

#!/bin/bash
read -t 5 -p "enter your name:" name
echo "hello,$name"

. i.sh運行腳本
在這里插入圖片描述

函數

分為系統函數和自定義函數

系統函數

系統自帶的一些,但是感覺使用起來和命令差不多

basename

basename:截取文件名
可帶參數 suffix:后綴,會去掉文件名的后綴

basename /tmp/a.txt .txt

在這里插入圖片描述

dirname

dirname:獲得文件的路徑,不包括文件名

dirname /tmp/a.txt

在這里插入圖片描述

自定義函數

語法

方法名()
{
方法體
}
在腳本中編寫方法:

#! /bin/bash
function add(){
s=$[ $1 + $2 ]
echo $s
}
read -p "enter first numnber: " a
read -p "enter second number: " b
add $a $b

這個腳本就是提示用戶輸入a,b兩個參數
add $a $b調用方法,傳入a,b變量
運行結果:
在這里插入圖片描述

正則表達式

對自己想要的字符或者文本做模糊式的匹配搜索,就使用正則表達式寫一個匹配的規則。
linux中很多的文本工具都是支持正則表達式的,比如grep。

常用的匹配字符

^

^可以匹配以指定字符開頭的行

cat a.txt | grep ^j

可以查詢a.txt文本中的以j開頭的行
在這里插入圖片描述

$

$可以匹配以指定字符結尾的行

cat a.txt | grep oo$

可以查詢a.txt文本中的以oo結尾的行在這里插入圖片描述

.

.:可以匹配一個任意字符

 cat a.txt | grep h...o

可以查詢包含h開頭,o結尾的5個字符的字符串的行,h和o之間的3個字符任意
在這里插入圖片描述

*

*:不是單獨使用的,是前一個字符出現0次或者多次,即h *e表示可以匹配到e,he,hhe

cat a.txt | grep hel*o 

在這里插入圖片描述
可以和.結合使用,.*表示任意字符任意長度

[ ]

[]:字符區間,表示匹配某個范圍內的字符
常用的方式有

  • [0,9]:匹配0或者9
  • [0-9]:匹配0-9中的一個字符
  • [0-90]*:匹配任意長度的0-9中的字符,即任意數字
  • [a-z]:匹配任意字母字符
\

\:轉義符,對于一些特殊的符號,要使用轉義符

 cat a.txt | grep '\$' 

需要使用’'單引號
在這里插入圖片描述

擴展

一些擴展是不支持的,需要-E參數
刷選手機號:
匹配規則是1開頭,0-9數字出現10次的字符
{}里面可以添加數字,但需要加-E參數來支持
需要有$來限制
在這里插入圖片描述

文本處理工具

cut

可以從文件中的每一行去進行分割,選擇輸出想要的內容
參數:

  • -f:選擇第幾列
  • -d:分割符
  • -c:按字符進行分割
例子

有一個a.txt文本
在這里插入圖片描述

使用cut

cat a.txt | cut -d " " -f 2

輸出:
在這里插入圖片描述

解析
-d " " 表示以空格分割,a.txt中則會被分割成兩列
-f 2 表示選擇第二列
如果想選擇多個列,可以,隔開, -f 2,3,4
如果想選擇2列到4列的內容,可以使用 -f 2-4
如果想選擇2列之后的全部,可以使用 -f 2-

awk

和cut類似,只是功能更加的強大,默認以空格分開,可以對選擇的部分做處理。

參數:

  • -F:分隔符
  • -v:可以引入一個變量
例子

有一個a.txt文本
在這里插入圖片描述

使用awk

 cat a.txt | awk  '/^hello/ {print $2","$1}'

輸出結果:
在這里插入圖片描述
解析:
‘/^hello/ {print $2","$1}’:它是分成兩部分的,第一部分是/^hello/,是一個正則表達式,可以帥選想要的內容,可以省略的。第二部分是{print $2",“$1},print是輸出,”,"是輸出選擇的兩列內容中間以什么分割。這兩部分要寫在’ '單引號中,因為awk是默認空格分割的,所以沒有指定分割符了,不然可以使用-F指定分割符。

添加字符串

可以在開頭和結尾添加字符串,使用BEGIN{print “內容”}和END{print “內容”}

cat a.txt | awk 'BEGIN{print "begin"} /^hello/ {print $2","$1} END{print "end"}'

運行結果:
在這里插入圖片描述

可以對列加減

準備一個a.txt,第三列是數字
在這里插入圖片描述

 cat a.txt | awk  '{print $3 + 1}'

運行結果:
在這里插入圖片描述

使用自定義變量
cat a.txt | awk -v i=1 '{print $3 + i}'

使用-v參數可以引入自定義變量,傳遞給’'部分

內置變量

awk中默認自帶的變量

  • FILENAME:文件名
  • NR:已讀行號
  • NF:列數

查詢文件中的空行行號:
準備一個a.txt文件
在這里插入圖片描述
awk '/^$/ {print NR}' a.txt
運行結果:
在這里插入圖片描述

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

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

相關文章

算法實驗3:貪心算法的應用

實驗內容 &#xff08;1&#xff09;活動安排問題 設有n個活動的集合E{1, 2, …, n}&#xff0c;其中每個活動都要求使用同一資源&#xff0c;而在同一時間內只有一個活動能使用這一資源。每個活動i都有一個要求使用該資源的起始時間si和一個結束時間fi&#xff0c;且si <f…

JavaWeb-【2】CSS和JavaScript

筆記系列持續更新,真正做到詳細!!本次系列重點講解后端,那么第一階段先講解前端【續上篇HTML】 目錄 一、CSS 1、CSS介紹 2、CSS快速入門 3、CSS語法 4、字體顏色和邊框 5、背景顏色和字體樣式 6、div和文本居中 7、超鏈接去下劃線和表格細線 8、無序列表去掉樣式…

持續集成03--Jenkins的安裝與配置

前言 在持續集成/持續部署&#xff08;CI/CD&#xff09;的實踐中&#xff0c;Jenkins作為一個開源的自動化服務器&#xff0c;扮演著至關重要的角色。本篇“持續集成03--Jenkins的安裝配置”將帶您走進Jenkins的世界&#xff0c;深入了解如何在Linux環境中安裝并配置Jenkins。…

VUE:跨域配置代理服務器

//在vite.config。js中&#xff0c;同插件配置同級進行配置server:{proxy:{"/myrequest":{//代理域名&#xff0c;可自行修改target:"https://m.wzj.com/",//訪問服務器的目標域名changeOrigin:true,//允許跨域configure:(proxy,options) > {proxy.on(&…

人工智能與人類社會的共生共榮

隨著科技的飛速發展&#xff0c;人工智能&#xff08;AI&#xff09;已經不再是遙不可及的概念&#xff0c;而是深深地融入到了我們的日常生活中。從智能家居到智慧城市&#xff0c;從自動駕駛到醫療診斷&#xff0c;人工智能正以前所未有的方式改變著人類社會的每一個角落。然…

掌握Laravel控制器:構建強大應用的基石

掌握Laravel控制器&#xff1a;構建強大應用的基石 在Laravel框架中&#xff0c;控制器&#xff08;Controller&#xff09;是處理用戶請求和返回響應的核心組件。控制器充當了應用邏輯的中轉站&#xff0c;它接收來自路由的請求&#xff0c;處理這些請求&#xff0c;并返回視…

C4D各版本軟件下載+自學C4D 從入門到精通【學習視頻教程全集】+【素材筆記】

下載鏈接&#xff1a; 迅雷網盤https://pan.xunlei.com/s/VO1tydOxEo-Az_QCM-Jz2R4RA1?pwdvxg4# 夸克網盤https://pan.quark.cn/s/fe7450b02d80 百度網盤https://pan.baidu.com/s/1Omj4WL93F1DNdA2iP4SiMQ?pwdwmb8

[C++] 深度剖析C_C++內存管理機制

文章目錄 內存分布內存分布圖解 C語言中動態內存管理方式malloc:callocrealloc C內存管理方式內置類型**自定義類型** operator new & operator deleteoperator new & operator delete函數operator newoperator delete **new T[N]** 與**delete[]** **定位new表達式(pl…

vue 實現下拉框的數據是樹狀結構

頁面顯示效果 vue實現代碼 <el-form-item label"公司名稱" prop"comName"><el-select ref"select" v-model"queryParams.comName" placeholder"請選擇公司名稱" clearable size"small"change"handl…

可學習激活函數 Maxout

可學習激活函數 Maxout 是一種神經網絡中的激活函數&#xff0c;它在特征提取的過程中能夠學習到最優的激活方式&#xff0c;從而提高模型的表達能力和性能。Maxout 由 Ian Goodfellow 等人在2013年提出&#xff0c;是一種能夠在訓練過程中自適應地選擇激活函數的模型。 Maxou…

在 Windows 上開發.NET MAUI 應用_1.安裝開發環境

開發跨平臺的本機 .NET Multi-platform App UI (.NET MAUI) 應用需要 Visual Studio 2022 17.8 或更高版本&#xff0c;或者具有 .NET MAUI 擴展的最新 Visual Studio Code。要開始在 Windows 上開發本機跨平臺 .NET MAUI 應用&#xff0c;請按照安裝步驟安裝 Visual Studio 20…

分布式 I/O 系統Modbus TCP 耦合器BL200

BL200 耦合器是一個數據采集和控制系統&#xff0c;基于強大的 32 位微處理器設計&#xff0c;采用 Linux 操作系統&#xff0c;可以快速接入現場 PLC、SCADA 以及 ERP 系統&#xff0c; 內置邏輯控制、邊緣計算應用&#xff0c;支持標準 Modbus TCP 服務器通訊&#xff0c;以太…

SVN常用命令

VCS VCS&#xff08;Version Control System&#xff09;是版本控制系統的縮寫&#xff0c;它是一種用于管理和跟蹤軟件代碼變化的系統 SVN Subversion&#xff08;SVN&#xff09;是一個廣泛使用的版本控制系統&#xff0c;用于管理源代碼和文檔。在命令行中使用SVN涉及一系…

Blender使用(二)點線面基本操作

Blender使用之點線面 1.編輯模式 tab鍵進行切換&#xff0c;為了方便菜單調出&#xff0c;可以設置鍵位映射為拖動時的餅菜單。 設置好后&#xff0c;按住tab鍵移動鼠標(注意不要點擊鼠標)&#xff0c;即可彈出編輯菜單。 默認是點模式&#xff0c;在左上角可進行點線面的切換…

電腦型號數據源的性能提升:新一代技術的突破

隨著科技的不斷發展&#xff0c;電腦型號的數據源性能也得到了顯著的提升。新一代技術的突破使得電腦型號的數據源更加準確、全面且易于使用。本文將從代碼的角度解釋這一突破&#xff0c;并參考挖數據平臺的內容&#xff0c;向大家介紹電腦型號數據源的性能提升。 首先&#…

嘗試理解docker網絡通信邏輯

一、docker是什么 Docker本質是一個進程,宿主機通過namespace隔離機制提供進程需要運行基礎環境&#xff0c;并且通過Cgroup限制進程調用資源。Docker的隔離機制包括 network隔離&#xff0c;此次主要探討網絡隔離mount隔離hostname隔離user隔離pid隔離進程通信隔離 二、doc…

spring-boot2.x整合Kafka步驟

1.pom依賴添加 <properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</ma…

自學鴻蒙HarmonyOS的ArkTS語言<十二>wrapBuilder:組件工廠類封裝

// FactoryComponent.ets Builder function Radio1() {Column() {Text(單選組件&#xff1a;)Row() {Radio({ value: 1, group: radioGroup })Text(選項1)}Row() {Radio({ value: 2, group: radioGroup })Text(選項2)}}.margin(10) }Builder function Checkbox1() {Column() {T…

DP(5) | 完全背包 | Java | 卡碼52, LeetCode 518, 377, 70 做題總結

完全背包 感覺越寫越糊涂了&#xff0c;初始化怎么做的&#xff1f;遞推公式怎么來的&#xff1f; 卡碼52. 攜帶研究材料 https://kamacoder.com/problempage.php?pid1052 import java.util.*;public class Main {public static void main(String[] args) {Scanner sc new …

Java面試八股之Redis集群是怎么選擇數據庫的

在Redis集群中&#xff0c;數據被水平分割&#xff08;sharding&#xff09;到各個節點上&#xff0c;這意味著所有的鍵空間被分成16384個哈希槽&#xff08;hash slots&#xff09;&#xff0c;這些槽均勻地分布在集群中的各個節點上。Redis集群并不支持傳統的數據庫切換&…