Shell字符串操作集合

  • 字符操作
    • 字符串的長度
    • 獲取字符串中某些字符的個數
    • 統計單詞的個數
    • bash提供的數組數據結構它是以數字為下標的和C語言從0開始的下一樣
    • awk里面的數組
    • 取子串
    • 匹配求子串
    • sed有按行打印的功能記得用tr把空格換為行號
    • tr來取子串
    • head和tail
    • 查詢字串
    • 子串替換
    • tac 會將文本的內容倒置顯示正如名字和 cat 相反一樣功能和cat也是相反的
    • 插入子串
    • 刪除子串
    • 子串比較使用test命令
    • 子串排序
    • 進制轉換
    • 正則表達式處理url
    • sed 和 awk 匹配文件中的行
    • 處理格式化的文本
    • 文件關聯操作

字符操作

1.字符串的長度

* $ var="get the length of me"
$ echo ${#var}
20
* $ expr length "$var" #注意這里是雙引號
20
* $ echo $var | awk '{printf("%d",length($0))}'
20
* $ echo -n $var | wc -c # echo每次輸出時,會自動的輸出換行符,-n表示部署出那一個換行符
20

2.獲取字符串中,某些字符的個數

* $ echo $var | tr -cd g | wc -c
2
$ echo -n $var | sed 's/[^g]//g' | wc -c
2
$ echo -n $var | sed 's/[^gt]//g' | wc -c
5

3.統計單詞的個數

* $ echo $var | wc -w

4.bash提供的數組數據結構,它是以數字為下標的,和C語言從0開始的下一樣

* $ var="get length of me"
$ var_arr=($var) #這里把var字符串,以數組的形式存放到var_arr中,默認以空格分割
$ echo ${var_arr[0]} ${var_arr[1]} ${var_arr[2]} ${var_arr[3]} ${var_arr[4]}
get the length of me
$ echo ${var_arr[@]} #@表示整個字符串
get the length of me
$ echo ${var_arr[*]} #*表示整個字符串
get the length of me
$ echo ${#var_arr[@]}#求得整個字符數組的元素個數
5
$ echo ${#var_arr[0]}#求得某個字符串的字符個數
3
$ var_arr[5]="new_element" #直接給數組元素賦值
$ echo ${var_arr[@]}
get the length of me new_element
$ echo ${#var_arr[@]}
6
* $ for i in $var; do echo $i" "; done;
get the length of me

5.awk里面的數組

* echo $var | awk '{printf("%d %s\n",split($0,var_arr," "),var_arr[1])}'
split把字符串按照空格分割,存放到var_arr中,并返回數組的長度,注意,這里第一個元素的下標不是0,而是1。
* awk把一行按照空格分成若干個域,并用$1,$2,$3...來引用,$0表示整行,NF表示該行域的總數。
* echo $var | awk '{split($0,var_arr," ");for(i in var_arr) printf("%s ",var_arr[i]);}'
這里的for循環中,循環變量為下標
* echo $var | awk '{split($0,var_arr," ");delete var_arr[1]}'
刪除第一個數組元素

6.取子串

* $ var="get length of me"
$ echo ${var:0:3}
get
$ echo ${var(-2)} #反方向
me
$ echo `expr substr "$var" 5 3`
the
$ echo $var | awk '{printf("%s\n",substr($0,9,6))}' #從第九個位置開始選取6個字符
length
* 使用cut取子串
$ echo $var | cut -d " " -f 5
me
* $ echo $var | sed 's/ [a-z]*//g'
get
刪除空格+字母串
$ echo $var | sed 's/[a-z]* //g'
me
刪除字母串+空格

7.匹配求子串

* $ echo ${var%% *} #從最右邊開始,刪除最左邊空格右邊的所有字符
get
* $ echo ${var% *} #從最右邊開始,刪除第一個空格右邊的所有字符
get the length of
* $ echo ${var##* } #從最左邊開始,刪除最右邊空格左邊的所有字符
me
* $ echo ${var#* } #從最左邊開始,刪除第一個空格左邊的所有字符
the length of me

8.sed有按行打印的功能,記得用tr把空格換為行號

* $ echo $var | tr " " "\n" | sed -n 5p
me
* $ echo $var | tr " " "\n" | sed -n 1p
get

9.tr來取子串

* $ echo $var | tr -d " "
getthelengthofme
* $ echo $var | tr -cd "[a-z]" #僅僅保留字母
getthelengthofme

10.head和tail

* $ echo "abcdefghijk" | head -c 4
abcd
* $ echo "abcdefghijk" | tail -c 4
hijk

11.查詢字串

* $ var="get the length of me"
$ expr index "$var" t
3
* $ echo $var | awk '{printf("%d\n",match($0,"the"));}'
5

12.子串替換

* $ var="get the length of me"
$ echo ${var/ /_} #把第一個空格替換成下劃線
get_the length of me
$ echo ${var// /_} #把所有的空格都替換成下劃線
get_the_length_of_me
$ echo $var | awk '{sub(" ","_",$0);printf("%s\n",$0);}'
get_the length of me
$ echo $var | awk '{gsub(" ","_",$0);printf("%s\n",$0);}'
get_the_length_of_me
$ echo $var | sed 's/ /_/'
get_the length of me
$ echo $var | tr " " "_"
get_the_length_of_me
$ echo $var | tr "[a-z]" "[A-Z]"
GET THE LENGTH OF ME

13.tac 會將文本的內容倒置顯示,正如名字和 cat 相反一樣,功能和cat也是相反的

14.插入子串

* $ var="get the length of me"
$ echo ${var/ /_ } #在第一個空格前加上_
get_ the length of me
$ echo ${var// /_ } #在所有的空格前都加上_
get_ the_ length_ of_ me
$ echo ${var/ / _}
get _the length of me
$ echo ${var// / _} #在所有的空格之后都加上_
get _the _length _of _me* $ echo $var | sed 's//\1_/' #在第一個空格之后加上_
get _the length of me
$ echo $var | sed 's//\1_/g'
get _the _length _of _me
$ echo $var | sed 's/[a?z]? [a?z]?/\2 \1/' #調換get和the的位置
the get length of me

15.刪除子串

* $ var="get the length of me"
$ echo ${var// /}
getthelengthofme* $ echo $var | awk '{gsub(" ","",$0);printf("%s",$0);}'
getthelengthofme* $ echo $var | sed 's/ //g'
getthelengthofme* $ echo $var | tr -d " "
getthelengthofme

16.子串比較使用test命令

17.子串排序

* $ echo $var | tr " " "\n" | sort #正排序
get
length
me
of
the
$ echo $var | tr " " "\n" | sort -r
the
of
me
length
get
* $ cat data.txt | tr " " "\n" | sort -n

18.進制轉換

* $ echo "ibase=10;obase=16;10" | bc
A

19.正則表達式處理url

* $ url="ftp://anonymous:ftp@mirror.lzu.edu.cn/software/scim-1.4.7.tar.gz"
$ echo $url | grep "ftp://[a-z]*:[a-z]*@[a-z0-9\./-]*" #判斷url的有效性
ftp://anonymous:ftp@mirror.lzu.edu.cn/software/scim-1.4.7.tar.gz
* $ echo "$url" "$(expr index "$url" :)" | awk '{printf("%s\n",substr($1,1,$2-1));}' #截取協議
ftp
$ echo ${url%%:*}
ftp
* $ echo ${url##*@} | cut -d "/" -f 1 #截取域名
mirror.lzu.edu.cn
$ tmp=${url##*@};echo ${tmp%%/*}
mirror.lzu.edu.cn
* $ tmp=${url##*@};echo ${tmp%/*} #截取路徑
mirror.lzu.edu.cn/software
* $ echo ${url##*/} #截取文件名
scim-1.4.7.tar.gz
* $ echo $url | sed 's/.*[0-9].//g' #截取文件類型
tar.gz

20.sed 和 awk 匹配文件中的行

* $ sed -n 7,9p README #打印README7-9行

21.處理格式化的文本

* $ cat /etc/passwd | cut -d ":" -f 1,5 #截取/etc/passwd文件中的用戶名和組
* $ cat /etc/group | cut -d ":" -f 1,3 #截取/etc/group文件中的組名和組id

22.文件關聯操作

* $ join -o 1.1,2.1 -t":" -1 4 -2 3 /etc/passwd /etc/group
#join命令用來連接兩個文件,類似于數據庫中兩個表的連接。-t指定分隔符,
-1 4 -2 3 指定按照第一個文件的第四列和第二個文件的第三列,即組ID進行
連接,-o 1.1 2.1表示僅僅輸出第一個文件的第一列和第二個文件的第一列

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

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

相關文章

百練4982 踩方格

總時間限制: 1000ms 內存限制: 65536kB描述有一個方格矩陣,矩陣邊界在無窮遠處。我們做如下假設:a. 每走一步時,只能從當前方格移動一格,走到某個相鄰的方格上;b. 走過的格子立即塌陷無法再走第二次;…

Qt自定義QML模塊

自定義QML模塊 含義為將常用風格的Button,Text,RadioButton,或者自定義的控件作為一個控件進行使用,節省代碼。 優點: 代碼簡潔,減少重復代碼自定義的控件進行封裝重復使用可以與QML自帶的庫區別開來優化項目結構 一、創建模塊…

POJ3984 迷宮問題【BFS】

好長時間沒有敲過代碼了,感覺之前學過的都忘了,趁著這個暑假,打算把之前學習的東西都復習一下,當然得慢慢來,畢竟好長時間不敲代碼了,怎么著都有些生疏,再加上之前學的也不咋地,相當…

宏定義基本用法

宏定義 不帶參數 宏定義又稱為宏代換、宏替換,簡稱“宏”。 格式: #define 標識符 字符串其中的標識符就是所謂的符號常量,也稱為“宏名”。 預處理(預編譯)工作也叫做宏展開:將宏名替換為字符串。 掌…

廣度優先搜索練習之神奇的電梯

廣度優先搜索練習之神奇的電梯 Time Limit: 1000ms Memory limit: 65536K 題目描述 有一座已知層數為n的高樓,這座高樓的特殊之處在于只能靠電梯去上下樓,所以要去到某一層要非常耽誤時間,然而更悲哀的是,這座高樓的電梯是限號…

ubuntu安裝proxychains及自動補全

proxychains ProxyChains是本人目前為止用到的最方便的代理工具。 inux下代理一般是通過http_proxy和https_proxy這兩個環境變量,但是很多軟件并不使用這兩個變量,導致流量無法走代理。在不使用vpn的前提下,linux并沒有轉發所有流量的真全局…

快速冪講解

快速冪的目的就是做到快速求冪,假設我們要求a^b,按照樸素算法就是把a連乘b次,這樣一來時間復雜度是O(b)也即是O(n)級別,快速冪能做到O(logn),快了好多好多。它的原理如下: 假設我們要求a^b,那么其實b是可以…

如何查詢資料

如何查詢資料技術資料及問題查詢查詢方法分類查找提取關鍵字GitHub項目優先使用Google搜索引擎Copy Paste論文查找詢問主管 測試修改使用總結分享 公司信息查詢國內公司國外公司 如何查詢資料 技術資料及問題查詢 查詢方法 資料與解決辦法的查詢大致分為7大類。 1.分類查…

山東省第八屆 ACM 省賽 sum of power(SDUT 3899)

Problem Description Calculate ∑ni1im mod (10000000007) for given n,m. Input Input contains two integers n,m(1≤n≤1000,0≤m≤10). Output Output the answer in a single line. Example Input 10 0 Example Output 10 方法:快速冪和大數求和 …

Ubuntu主題更換

Ubuntu主題更換 目前的Ubuntu有Unity和Gnome兩個比較流行的版本,以下為Gnome桌面環境的主題更換,其他桌面環境類似。 主題的下載地址,點擊 Theme 將在網絡上下載的主題文件進行解壓,然后拷貝到 /usr/share/themes/ 目錄下&…

awk簡單使用

awk 用于在linux/unix下對文本和數據進行處理,支持用戶自定義函數和動態正則表達式等先進功能。 命令格式: awk BEGIN{ print “start” } pattern { commend } END{print "end"} file awk "BEGIN{ print “start” } pattern { commend } END{pr…

Ubuntu 14.04 下 Virtual Judge 的搭建

前期準備工作 1.1 一個Linux系統 因為現場賽的緣故,我一直使用的都是ubuntu。 這里我測試用的是Ubuntu14.04 Desktop 64bit ,當然選擇Server會更好一些. 系統的安裝不再贅述,作為服務器請選用Server版本。1.2 更新源 在搭建環境之前,請確保…

BitMap的原理介紹與實現

BitMap 位圖(bitmap)是一種非常常用的結構,在索引,數據壓縮等方面有廣泛應用。位圖是通過將數組下標與應用中的一些值關聯映射,數組中該下標所指定的位置上的元素可以用來標識應用中值的情況(是否存在或者數…

MySQL與PHP連接

1、mysql_connect()-建立數據庫連接 格式: resource mysql_connect([string hostname [:port] [:/path/to/socket] [, string username] [, string password]]) 例: $conn mysql_connect("localhost", "username", "pa…

QML Profiler性能優化教程

QML Profiler 2018年1月26日 vincent 對于一個程序的開發,性能優化是開發中的一個重要步驟。 我們肯定不希望開發出來的程序表現出卡頓,最好是處處流暢,絲滑般的體驗。 對于C程序,我們有很多方法可以做性能優化,例如…

uburntu在不能自動獲取網絡時的聯網設置

一:網絡基礎配置 1. eth0設置不正確,導致無法正常啟動,修改eth0配置文件就好 ubuntu 12.04的網絡設置文件是/etc/network/interfaces,打開文件,會看到 auto lo iface lo inet loopback 這邊的設置是本地回路。在后…

計算機顯卡知識普及

顯卡知識普及 一、什么是顯卡? 顯示接口卡(Video card,Graphics card)、顯示器配置卡簡稱為顯卡,是個人電腦基本組成部分之一。 用途是將計算機系統所需要的顯示信息進行轉換驅動,并向顯示器提供信號&…

整除的尾數

Problem Description 一個整數&#xff0c;只知道前幾位&#xff0c;不知道末二位&#xff0c;被另一個整數除盡了&#xff0c;那么該數的末二位該是什么呢&#xff1f; Input 輸入數據有若干組&#xff0c;每組數據包含二個整數a&#xff0c;b(0<10000,10<b<100)&…

QML 控件大全

QML TypeContainerDelayButtonDialDialogButtonBoxDialogDrawerMenuMenuBarOverlayPageIndicatorRangeSliderScrollViewSpinBoxStackViewSwipeViewSwitchTabBarToolBarToolSeparatorToolTipTumbler QML Type 本篇主要介紹QtQuick Controls 2,Qt Creator 5.10 1.Container im…

斐波那契的整除

Description 已知斐波那契數列有如下遞歸定義&#xff0c;f(1)1,f(2)1, 且n>3,f(n)f(n-1)f(n-2)&#xff0c;它的前幾項可以表示為1&#xff0c; 1&#xff0c;2 &#xff0c;3 &#xff0c;5 &#xff0c;8&#xff0c;13&#xff0c;21&#xff0c;34…&#xff0c;現在的…