shell腳本之sort,uniq,tr,cut,sphit,paste,ecal與正則表達式

sort命令

uniq命令

tr命令

cut命令

sphit命令

paste命令

ecal命令

正則表達式

sort命令

sort命令---以行為單位對文件內容進行排序,也可以根據不同的數據類型來排序
比較原則是從首字符向后,依次按ASCII碼值進行比較,最后將他們按升序輸出。

語法格式:
sort [選項] 參數

先是對首字母進行排序,如果首字母相同則對第二個字母進行計較,以此類推。

加上-n的選項,實現數值大小的排序

加上-r的選項實現反向排序,可以和-n一起使用

加上-u的選項實現去重,重復出現的數值不再出現。

使用sort -t指定分隔符,-k指定字段為3 -n按照數值排序 指定文件,實現用戶的uid號排序

cat file | sort 選項

常用選項:
-n:按照數字進行排序
-r:反向排序
-u:等同于uniq,表示相同的數據僅顯示一行
-t:指定字段分隔符,默認使用[Tab]鍵分隔
-k:指定排序字段
-o <輸出文件>:將排序后的結果轉存至指定文件
-f:忽略大小寫,會將小寫字母都轉換為大寫字母來進行比較
-b:忽略每行前面的空格

sort -n testfile2

sort -t ':' -k 3 -n /etc/passwd

du -a | sort -nr -o du.txt

uniq命令

uniq命令---用于報告或者忽略文件中連續的重復行,常與 sort 命令結合使用

語法格式:
uniq [選項] 參數
cat file | uniq 選項

先使用sort進行排序,接管道符號uniq進行去重

對重復出現的數字進行統計

加上-d和-u分別輸出連續重復的行內容和不連續的行內容。

常用選項:
-c:進行計數,并刪除文件中重復出現的行
-d:僅顯示連續的重復行
-u:僅顯示出現一次的行

uniq testfile3

sort -n testfile3 | uniq -c

tr 命令

tr命令---常用來對來自標準輸入的字符進行替換、壓縮和刪除

語法格式:
tr [選項] [參數]

常用選項:
-c:保留字符集1的字符,其他的字符(包括換行符\n)用字符集2替換
-d:刪除所有屬于字符集1的字符
-s:將重復出現的字符串壓縮為一個字符;用字符集2 替換 字符集1
-t:字符集2 替換 字符集1,不加選項同結果。?? ?

echo "abcefg" | tr 'a-z' 'A-Z'

實現英文字母大小寫的互換

設置第一個字符a-d,后面的字符為0,則輸出的結果就會除了a-d后面的字符包括換行符都回變成0

當我們加上反斜杠,換行符也就不會被替代掉了。

參數:
字符集1:指定要轉換或刪除的原字符集。當執行轉換操作時,必須使用參數“字符集2”指定轉換的目標字符集。但執行刪除操作時,不需要參數“字符集2”;
字符集2:指定要轉換成的目標字符集。

echo -e "abc\ncabcdab" | tr -c "ab\n" "0"


echo -e "abc\ncabcdab" | tr -c "ab" "0"

echo 'hello world' | tr -d 'od'

刪除指定的內容

echo "thissss is a test linnnnnnne." | tr -s 'sn'

刪除空行?
echo -e "aa\n\n\n\n\nbb" | tr -s "\n"
cat testfile5 | tr -s "\n"

把路徑變量中的冒號":",替換成換行符"\n"
echo $PATH | tr -s ":" "\n"
echo -e "aa\n\n\n\n\nbb" | tr -s "\n" ":"

刪除Windows文件“造成”的'^M'字符:
cat abc.txt | tr -s "\r" "\n" > new_file

cat abc.txt | tr -d "\r" > new_file
Linux中遇到換行符("\n")會進行回車+換行的操作,回車符反而只會作為控制字符("^M")顯示,不發生回車的操作。而windows中要回車符+換行符("\r\n")才會回車+換行,缺少一個控制符或者順序不對都不能正確的另起一行。
cat -A abc.txt

cat -v abc.txt


dos2unix abc.txt


數組排序


echo ${array[*]} | tr ' ' '\n' | sort -n > file

a=0
for i in $(cat file)
do
array[$a]=$i
let a++
#array+=($i)
done

cut 命令

cut命令---顯示行中的指定部分,刪除文件中指定字段
語法格式:
cut ?參數
cat file | cut 選項

常用選項:
-f :通過指定哪一個字段進行提取。cut命令使用“TAB”作為默認的字段分隔符。
-d :“TAB”是默認的分隔符,使用此選項可以更改為其他的分隔符。
--complement :此選項用于排除所指定的字段。


--output-delimiter :更改輸出內容的分隔符。

cut -d ':' -f 1 /etc/passwd
grep '/bin/bash' /etc/passwd | cut -d ':' -f 1-4,6,7?? ??? ??? ?#以-分隔的開始字段和結束字段指定字段的范圍


grep '/bin/bash' /etc/passwd | cut -d ':' --complement -f 2?? ??? ?#排除第二個字段
cut -d ':' -f1,7 --output-delimiter=' ' /etc/passwd?? ??? ??? ??? ?#輸出分隔符使用空格分隔

i=123456789
echo $i | cut -b 1-3?? ??? ?#起始位置從1開始
123

echo ${i:0:3}?? ??? ??? ??? ?#起始位置從0開始
expr substr $i 1 3?? ??? ??? ?#起始位置從1開始

split 命令

split命令---linux下將一個大的文件拆分成若干小文件
語法格式:
split 選項 參數 原始文件 拆分后文件名前綴

常用選項:
–l :以行數拆分
–b :以大小拆分

split -l 50 /etc/passwd passwd?? ??? ?

#以50行對文件進行拆分,最后一個文件的行數沒有50行以實際行數進行分配
?

如何將一個10G文件分割為10個1G的文件 ? ? ? ?split -b 1G -d 原文件 ?目標文件名前綴
如何將一個100行文件分割為10個10行的文件 ? ?split -l 10 -d 原文件 ?目標文件名前綴

paste命令

paste命令---用于合并文件的列

paste [-s][-d <間隔字符>] 文件...

常用選項:
-d<間隔字符> :用指定的間隔字符取代制表符
-s :把多行內容合并為一行進行顯示

文件替換。

eval命令

命令字前加上eval時,shell會在執行命令之前掃描它兩次。eval命令將首先會先掃描命令行進行所有的置換,然后再執行該命令。該命令適用于那些一次掃描無法實現其功能的變量。該命令對變量進行兩次掃描。
示例1:
echo "hello world" > file
myfile="cat file"
echo $myfile
eval $myfile

示例2:
vim test.sh
#!/bin/bash
eval echo \$$#

./test.sh 1 2 3 4

得4

示例3:
a=100
b=a
eval echo \$$b

100
eval $b=50
echo $a

50

正則表達式

正則表達式---通常用于判斷語句中,用來檢查某一字符串是否滿足某一格式

正則表達式是由普通字符與元字符組成
普通字符包括大小寫字母、數字、標點符號及一些其他符號
元字符是指在正則表達式中具有特殊意義的專用字符,可以用來規定其前導字符(即位于元字符前面的字符或表達式)在目標對象中的出現模式


基礎正則表達式常見元字符:(支持的工具:grep、egrep、sed、awk)
\ :轉義字符,用于取消特殊符號的含義,例:\!、\n、\$等
^ :匹配字符串開始的位置,例:^a、^the、^#、^[a-z]?
$ :匹配字符串結束的位置,例:word$、^$匹配空行
. :匹配除\n之外的任意的一個字符,例:go.d、g..d
* :匹配前面子表達式0次或者多次,例:goo*d、go.*d
[list] :匹配list列表中的一個字符,例:go[ola]d,[abc]、[a-z]、[a-z0-9]、[0-9]匹配任意一位數字
[^list] :匹配任意非list列表中的一個字符,例:[^0-9]、[^A-Z0-9]、[^a-z]匹配任意一位非小寫字母
\{n\} :匹配前面的子表達式n次,例:go\{2\}d、'[0-9]\{2\}'匹配兩位數字
\{n,\} :匹配前面的子表達式不少于n次,例:go\{2,\}d、'[0-9]\{2,\}'匹配兩位及兩位以上數字
\{n,m\} :匹配前面的子表達式n到m次,例:go\{2,3\}d、'[0-9]\{2,3\}'匹配兩位到三位數字
注:egrep、awk使用{n}、{n,}、{n,m}匹配時“{}”前不用加“\”
\w :匹配包括下劃線的任何單詞字符。\W :匹配任何非單詞字符。等價于“[^A-Za-z0-9_]”。
\d :匹配一個數字字符。\D :匹配一個非數字字符。等價于 [^0-9]。?? ??? ?grep -P
\s :空白符。\S :非空白符

擴展正則表達式元字符:(支持的工具:egrep、awk)grep -E ? sed -r
+ :匹配前面子表達式1次以上,例:go+d,將匹配至少一個o,如god、good、goood等
? :匹配前面子表達式0次或者1次,例:go?d,將匹配gd或god
() :將括號中的字符串作為一個整體,例:g(oo)+d,將匹配oo整體1次以上,如good、gooood等
| :以或的方式匹配字符串,例:g(oo|la)d,將匹配good或者glad


正則表達式匹配E-mail地址
用戶名@ :^([a-zA-Z0-9_\-\.\+]+)@
子域名 :([a-zA-Z0-9_\-\.]+)
.頂級域名(字符串長度一般在2到5) :\.([a-zA-Z]{2,5})$

egrep '^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$' email.txt
awk '/^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$/{print $0}' email.txt

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

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

相關文章

通過java將數據導出為PDF,包扣合并單元格操作

最近項目中需要將查詢出來的表格數據以PDF形式導出&#xff0c;并且表格的形式包含橫向行與縱向列的單元格合并操作&#xff0c;導出的最終效果如圖所示&#xff1a; 首先引入操作依賴 <!--導出pdf所需包--><dependency><groupId>com.itextpdf</groupId&…

【js獲取月份最后一天】

功能 獲取月份最后一天 代碼 function getLastDay(year, month) {//返回月份最后一天&#xff0c;不寫參數默認返回本月最后一天var date new Date(),date2, day;if (year undefined) year date.getFullYear(); //獲取今年年份if (month undefined) month date.getMont…

Linux- cron調度進程

cron 是一個 Unix 類操作系統中的時間調度守護進程&#xff0c;用于在特定的時間或間隔運行指定的命令或腳本。它非常適合自動化系統管理和維護任務&#xff0c;如備份、日志輪轉、系統監控等。以下是 cron 守護進程的詳細介紹。 cron 守護進程的工作原理 crontab 文件&#x…

上海市計算機學會競賽平臺2022年5月月賽丙組三數排序

題目描述 給定三個整數 &#x1d44e;,&#x1d44f;,&#x1d450;a,b,c&#xff0c;請將它們以從小到大的順序排序后輸出。 輸入格式 單獨一行&#xff1a;三個整數表示 &#x1d44e;,&#x1d44f;,&#x1d450;a,b,c。 輸出格式 單獨一行&#xff1a;表示按升序排列…

匯聚榮:拼多多長期沒有流量如何提高?

在電商的海洋中&#xff0c;拼多多以其獨特的團購模式吸引了眾多消費者的目光。然而&#xff0c;隨著市場競爭的加劇和消費者需求的多樣化&#xff0c;一些商家發現自家店鋪的流量持續低迷&#xff0c;銷售業績難以突破。面對這樣的挑戰&#xff0c;如何有效提升拼多多店鋪的客…

【Python】學生管理系統

為了了解Json以及在python中如何處理Json數據&#xff0c;我在這里整理了一段全面詳細的 Python 代碼&#xff0c;演示了如何加載、處理和操作 JSON 數據。該代碼包括讀取 JSON 數據、查詢學生信息、添加新學生、更新課程信息等操作。 示例代碼 import json# 示例 JSON 數據 …

深視 線掃相機 獲取點云數據

Qt hello - 專注于Qt的技術分享平臺 最近項目上用到了深視的線掃相機&#xff0c;集成了三天才搞定&#xff0c;分享下代碼。 順便吐槽一下&#xff0c;想用相機取圖&#xff0c;這么簡單的功能&#xff0c;搞得如此麻煩。 1&#xff0c;文檔有三份&#xff0c;就不能集成到…

【計算機畢業設計】springboot反詐科普平臺的設計與實現

相比于以前的傳統手工管理方式&#xff0c;智能化的管理方式可以大幅降低反詐科普平臺的運營人員成本&#xff0c;實現了反詐科普平臺的 標準化、制度化、程序化的管理&#xff0c;有效地防止了反詐科普平臺的隨意管理&#xff0c;提高了信息的處理速度和精確度&#xff0c;能夠…

python中字符串的 format() 方法

文章目錄 前言1、位置參數2、索引參數3、命名參數3、格式化參數 前言 format() 是 Python 字符串對象的方法&#xff0c;用于將值插入到格式化字符串的占位符中。它是一種靈活和強大的字符串格式化工具。format() 方法可以在字符串中使用占位符 {}&#xff0c;并通過傳遞參數將…

[vue] nvm

nvm ls // 看安裝的所有node.js的版本nvm list available // 查顯示可以安裝的所有node.js的版本可以在可選列表里。選擇任意版本安裝&#xff0c;比如安裝16.15.0 執行&#xff1a; nvm install 16.15.0安裝好了之后。可以執行&#xff1a; …

字符數組以及字符串相關的幾個函數

一.字符數組 1.定義&#xff1a;格式如下 char a[10]; //此處就表示定義了一個長度為10的字符數組 2.引用&#xff1a; 也和其余的數組一樣&#xff0c;是下標引用。 3.初始化&#xff1a; 如下代碼為字符數組初始化的幾種情況&#xff1a; int main() {char arr[5] {…

25考研英語長難句Day03

25考研英語長難句Day03 【a.詞組】【b.斷句】 多虧了電子學和微力學的不斷小型化&#xff0c;現在已經有一些機器人系統可以進行精確到毫米以下的腦部和骨骼手術&#xff0c;比技術高超的醫生用手能做到的精確得多。 【a.詞組】 詞組翻譯thanks to多虧了&#xff0c;由于cont…

【JavaEE進階】 Bean的作用域與生命周期

文章目錄 &#x1f343;Bean的作用域&#x1f6a9;作用域的使用&#x1f6a9;觀察Bean的作用域&#x1f388;單例作用域&#x1f388;多例作用域&#x1f388;請求作用域&#x1f388;會話作?域&#x1f388;Application作?域 &#x1f384;Bean的?命周期?總結 &#x1f34…

win11家庭中文版安裝docker,報錯 Docker Engine stopped

先引一下這位博主的鏈接超詳細Windows11家庭中文版系統安裝Docker-20230401_windows11安裝docker-CSDN博客&#xff0c;我到前五步(跳出頁面重啟)和博主都是一樣的&#xff0c;但是第六步我并沒有報錯&#xff0c;直接跳出docker界面 記錄一下我的解決辦法&#xff0c;首先按照…

金價又雙叒漲了!現貨黃金什么比較好

雖然近期有新聞顯示&#xff0c;國內的實物黃金價格出現大幅的下跌&#xff0c;但是從整體看&#xff0c;多個黃金投資品種的長期上升趨勢還是比較穩定的&#xff0c;因此我們會看到&#xff0c;很多投資者會趁現在這波下跌重新入場做多。那么投資黃金買什么比較好呢&#xff1…

Java中的類與對象-深入探索

在Java編程的世界里&#xff0c;類&#xff08;Class&#xff09;和對象&#xff08;Object&#xff09;是兩個核心概念。它們是面向對象編程&#xff08;OOP&#xff09;的基石&#xff0c;使得Java能夠處理復雜的數據結構和交互。本文將深入解析Java中的類和對象&#xff0c;…

淺述遙感技術在農業領域的應用

雖久未更新&#xff0c;但本文依舊延續以前敘述風格&#xff0c;即以通俗易懂方式描述關鍵問題。 本文章節安排如下&#xff1a; 簡述背景&#xff1b;介紹在農業領域的主要應用技術的關鍵問題&#xff1b;總結和實例介紹。 1 背景描述-何為遙感圖像&#xff1f; 一般來說&a…

如何向全國各大新聞網站投稿?

在信息爆炸的時代,新聞媒體的投稿工作對于單位的信息宣傳員來說,既是一項重要的職責,也是一項充滿挑戰的任務。作為一名信息宣傳員,我負責著單位的對外信息宣傳投稿工作,每個月都需要在各大媒體上發表文章,以展示單位的成果和風采。 然而,剛開始的投稿之路并不順暢。我習慣性地…

4種企業防泄密的辦法,強烈推薦第二種

4種企業防泄密的辦法&#xff0c;強烈推薦第二種 企業信息泄密常見的原因有內部人員、黑客、違規收集信息、第三方合作商&#xff0c;以下將為你詳細分析這些泄密原因以及應對的方法。 1、內部人員泄密 內部員工由于能夠接觸到敏感數據&#xff0c;成為主要的泄露數據群體。這…

springboot 序列化和反序列化

介紹 在Java中&#xff0c;序列化和反序列化是一種將對象轉換為字節流或將字節流轉換為對象的機制。通過序列化&#xff0c;可以將對象存儲到文件中、傳輸到網絡上&#xff0c;或者在分布式系統中進行對象的傳遞。本文將詳細介紹Java序列化和反序列化的原理、使用方法和常見應用…