国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

shell命令學習總結(jié)(綜合版)

2019-11-08 18:24:01
字體:
供稿:網(wǎng)友

shell基本命令for循環(huán)數(shù)學計算邏輯表達式數(shù)學表達式的計算數(shù)組的基本操作文本操作cut命令head命令tr命令sort命令uniq命令paste命令awk和sed命令使用awk命令sed命令grep命令

1.shell基本命令

for循環(huán)

for循環(huán)輸出1,3,5,7,9…97,99

for((i=1;i<100;i+=2))do echo $i;done//更喜歡這種for循環(huán)

數(shù)學計算

計算從控制臺讀取的兩個數(shù)的和、差、積和商 算術(shù)運算有三種方式:使用 exPR 外部程式、使用[]、使用(( ))和let表達式,個人更喜歡$(( )).

read xread yecho $((x + y))echo $((x - y))echo $((x * y))echo $((x / y))

邏輯表達式

if else條件判斷表達式,比較從控制臺輸入的兩個整數(shù)的大小

read xread yif [ $x -gt $y ]; thenecho "X is greater than Y"elif [ $x -lt $y ]; thenecho "X is less than Y"elseecho "X is equal to Y"fi//要注意在'['后面和']'前面都必須要有空格;

判斷字符串的是否相等

read chif [ $ch = 'Y' -o $ch = 'y' ]; thenecho "YES"elseecho "NO"fi//字符串判斷用"="判斷兩個字符串是否相等,而不是"==";

判斷三角形的形狀:等邊、等腰或不等邊

read aread bread cif [ $a = $b -a $a = $c -a $b = $c ]; thenecho "EQUILATERAL"elif [ $a = $b -o $a = $c -o $b = $c ]; thenecho "ISOSCELES"elseecho "SCALENE"fi//使用-o或-a來連接不同的邏輯判斷條件

字符串判斷 [ -z str ] 如果str的長度為零則返回為真,即空是真 [ str ]  如果字符串不為空則返回為真,與-n類似 [ str1 = str2 ] 如果兩個字符串相同則返回為真 [ str1 != str2 ] 如果字符串不相同則返回為真 [ str1 < str2 ] 如果 str1字典排序在str2前面則返回為真。

數(shù)值判斷 [ num1 -eq num2 ] 等于 [ num1 -ne num2 ] 不等 [ num1 -gt num2 ] 大于 [ num1 -ge num2 ] 大于等于 [ num1 -lt num2 ] 小于 [ num1 -le num2 ] 小于等于

邏輯判斷 [ ! EXPR ] 邏輯非 [ EXPR1 -a EXPR2 ] 邏輯與 [ EXPR1 -o EXPR2 ] 邏輯或 [ ] || [ ] 用OR來合并兩個條件 [ ] && [ ] 用AND來合并兩個條件

數(shù)學表達式的計算

計算輸入的數(shù)學表達式的值

read str //從控制臺讀取數(shù)學表達式printf "%.3f" $(echo $str | bc -l) //計算數(shù)學表達式 //"%.3f"輸出浮點數(shù),在小數(shù)點第三位進行四舍五入//echo $str | bc -l 計算數(shù)學表達式,如echo "5/3" | bc -l,輸出1.66666666666666666666

從控制臺讀取一定數(shù)目的數(shù)字,然后計算器平均值

read countsum=0for((i=0;i<count;i++))doread numsum=$((sum+num))doneprintf "%.3f" $(echo "$sum/$count" | bc -l)

count用來表示讀取數(shù)字的數(shù)量,sum表示和,然后通過echo “sum/count” | bc -l計算其平局值

2.數(shù)組的基本操作

1.將多行文本合并為一行

i=0while read linedoarr[$i]=$line((i++))doneecho ${arr[@]} //echo ${arr[@]}輸出所有的數(shù)組元素**Input**NamibiaNauruNepalNetherlandsNewZealandNicaraguaNigerNigeriaNorthKoreaNorway**Output**Namibia Nauru Nepal Netherlands NewZealand Nicaragua Niger Nigeria NorthKorea Norway

2.將包含‘a(chǎn)’字母的文本行刪掉

i=0while read linedoarr[$i]=$line((i++))doneecho ${arr[@]/*[aA]*/}**Input**NamibiaNauruNepalNetherlandsNewZealandNicaraguaNigerNigeriaNorthKoreaNorway**Output**Niger**Output2**echo ${arr[@]/*[aA]*/hello} //使用hello替換掉所有包含a的文本行hello hello hello hello hello hello Niger hello hello hello

3.將上述輸入文本重復(fù)輸出三次

X=$(paste -sd' ' fileName)echo $X $X $XX=$(cat fileName)echo $X $X $X**Output**Namibia Nauru Nepal Netherlands NewZealand Nicaragua Niger Nigeria NorthKorea Norway Namibia Nauru Nepal Netherlands NewZealand Nicaragua Niger Nigeria NorthKorea Norway Namibia Nauru Nepal Netherlands NewZealand Nicaragua Niger Nigeria NorthKorea Norway

4.輸出某個元素

echo ${arr[3]}

5.統(tǒng)計輸入文本有多少行

a.使用wc命令wc -lb.使用echo命令arr=($(cat))echo ${#arr[@]}c.使用for循環(huán)i=0while read linedoarr[$i]=$line((i++))doneecho "$i"

6.將每行第一個大寫字母替換為.

a.使用sed命令僅替換第一個大寫字母為.sed 's/[A-Z]/./' | paste -sd ' 'b.使用數(shù)組的替換來實現(xiàn)X=($(cat)) echo "${X[@]/[A-Z]/.}"**Output**.amibia .auru .epal .etherlands .ewZealand .icaragua .iger .igeria .orthKorea .orway

7.找出一組數(shù)據(jù)中落單的數(shù)

a.首先將' '替換為換行,然后對每行數(shù)據(jù)排序,獲取只出現(xiàn)一次的數(shù)字tr ' ' '/n' | sort | uniq -u

3.文本操作

cut命令

獲取每行的第三個字母

cut -c3 fileName

獲取每行的第三至第五個字母

cut -c3-5 fileName

獲取每行的第三和第五個字母

cut -c3,5 fileName

獲取每行的前三個字母

cut -c-3 fileName

獲取每行的第五個字母往后的字母

cut -c5- fileName

獲取文本中的前三個字段

cut -f1-3 fileName //默認的文本分隔符為/t//輸入1 New York, New York[10] 8,244,910 1 New York-Northern New Jersey-Long Island, NY-NJ-PA MSA 19,015,900 1 New York-Newark-Bridgeport, NY-NJ-CT-PA CSA 22,214,0832 Los Angeles, California 3,819,702 2 Los Angeles-Long Beach-Santa Ana, CA MSA 12,944,801 2 Los Angeles-Long Beach-Riverside, CA CSA 18,081,5693 Chicago, Illinois 2,707,120 3 Chicago-Joliet-Naperville, IL-IN-WI MSA 9,504,753 3 Chicago-Naperville-Michigan City, IL-IN-WI CSA 9,729,8254 Houston, Texas 2,145,146 4 Dallas-Fort Worth-Arlington, TX MSA 6,526,548 4 Washington-Baltimore-Northern Virginia, DC-MD-VA-WV CSA 8,718,0835 Philadelphia, Pennsylvania[11] 1,536,471 5 Houston-Sugar Land-Baytown, TX MSA 6,086,538 5 Boston-Worcester-Manchester, MA-RI-NH CSA 7,601,061//輸出1 New York, New York[10] 8,244,9102 Los Angeles, California 3,819,7023 Chicago, Illinois 2,707,1204 Houston, Texas 2,145,1465 Philadelphia, Pennsylvania[11] 1,536,471

獲取輸入文本的第四個字段

cut -d' ' -f4 fileName**input**HelloWorldhow are you**output**HelloWorld//輸入的三行最大字段都不超過4個,為什么只輸出Hello和World呢?這題不太靠譜

輸出某個字段或字段范圍和輸出某個字母或字符范圍類似,不再重復(fù)

head命令

輸出前20行

head -n20 fileName //不存在20行的話有多少行算多少行

輸出第11到第20行

head -n20 fileName | tail -n10

輸出前20個字符

head -c20 fileName //不存在20個字符的話有多少算多少

輸出后20行

tail -n20 fileName //不存在20行的話有多少行算多少行

輸出后20個字符

tail -c20 fileName //不存在20個字符的話有多少算多少

tr命令

將文本中的一些字母按先后順序替換為另外一些字母

tr '()' '[]' fileName**Input**int i=(int)5.8(23 + 5)*2**Output**int i=[int]5.8[23 + 5]*2tr '[a-z]' '[A-Z]' fileName //將文本中的小寫字母替換為大寫字母

刪除文本中存在的小寫字母

tr -d '[a-z]' fileName**Input**HelloWorldhow are you**Output**HW

將多個連續(xù)出現(xiàn)的給定字符合并為一個

tr -s ' ' fileName //合并多個空格為一個**Input**He lloWor ldhow are you**Output**He lloWor ldhow are you

sort命令

對文本行進行排序

sort fileName**Input**Dr. Rajendra Prasad January 26, 1950 May 13, 1962Dr. S. Radhakrishnan May 13, 1962 May 13, 1967Dr. Zakir Hussain May 13, 1967 August 24, 1969Shri Varahagiri Venkata Giri August 24, 1969 August 24, 1974Shri Fakhruddin Ali Ahmed August 24, 1974 February 11, 1977Shri Neelam Sanjiva Reddy July 25, 1977 July 25, 198**Output**Dr. Rajendra Prasad January 26, 1950 May 13, 1962Dr. S. Radhakrishnan May 13, 1962 May 13, 1967Dr. Zakir Hussain May 13, 1967 August 24, 1969Shri Fakhruddin Ali Ahmed August 24, 1974 February 11, 1977Shri Neelam Sanjiva Reddy July 25, 1977 July 25, 198Shri Varahagiri Venkata Giri August 24, 1969 August 24, 1974sort -r fileName //降序排序

對數(shù)字進行排序 sort -rn fileName //對數(shù)字進行降序排序 -n對數(shù)字排序

對輸入文本中第二個字段數(shù)字進行降序排序

sort -t$'/t' -nr -k2 fileName//-t$'/t' 以tab分割文本//-nr 數(shù)字降序排序//-k2 第二個字段**Input**Albany, N.Y. 22.2 46.6 71.1 49.3 38.60 136 64.4 57Albuquerque, N.M. 35.7 55.6 78.5 57.3 9.47 60 11.0 64Anchorage, Alaska 15.8 36.3 58.4 34.1 16.08 115 70.8 39 / 60Asheville, N.C. 35.8 54.1 73.0 55.2 47.07 126 15.3 39Atlanta, Ga. 42.7 61.6 80.0 62.8 50.20 115 2.1 69 / 65Atlantic City, N.J. 32.1 50.6 75.3 55.1 40.59 113 16.2 60 / 54Austin, Texas 50.2 68.3 84.2 70.6 33.65 85 0.9 62 / 58Baltimore, Md. 32.3 53.2 76.5 55.4 41.94 115 21.5 53Baton Rouge, La. 50.1 66.6 81.7 68.1 63.08 110 0.2 52 / 46Billings, Mont. 24.0 46.1 72.0 48.1 14.77 96 56.9 69Birmingham, Ala. 42.6 61.3 80.2 62.9 53.99 117 1.5 60Bismarck, N.D. 10.2 43.3 70.4 45.2 16.84 96 44.3 64Boise, Idaho 30.2 50.6 74.7 52.8 12.19 89 20.6 64Boston, Mass. 29.3 48.3 73.9 54.1 42.53 127 42.8 52 / 66Bridgeport, Conn. 29.9 48.9 74.0 54.7 44.15 119 26.2 55 / 49**Output**Austin, Texas 50.2 68.3 84.2 70.6 33.65 85 0.9 62 / 58Baton Rouge, La. 50.1 66.6 81.7 68.1 63.08 110 0.2 52 / 46Atlanta, Ga. 42.7 61.6 80.0 62.8 50.20 115 2.1 69 / 65Birmingham, Ala. 42.6 61.3 80.2 62.9 53.99 117 1.5 60Asheville, N.C. 35.8 54.1 73.0 55.2 47.07 126 15.3 39Albuquerque, N.M. 35.7 55.6 78.5 57.3 9.47 60 11.0 64Baltimore, Md. 32.3 53.2 76.5 55.4 41.94 115 21.5 53Atlantic City, N.J. 32.1 50.6 75.3 55.1 40.59 113 16.2 60 / 54Boise, Idaho 30.2 50.6 74.7 52.8 12.19 89 20.6 64Bridgeport, Conn. 29.9 48.9 74.0 54.7 44.15 119 26.2 55 / 49Boston, Mass. 29.3 48.3 73.9 54.1 42.53 127 42.8 52 / 66Billings, Mont. 24.0 46.1 72.0 48.1 14.77 96 56.9 69Albany, N.Y. 22.2 46.6 71.1 49.3 38.60 136 64.4 57Anchorage, Alaska 15.8 36.3 58.4 34.1 16.08 115 70.8 39 / 60Bismarck, N.D. 10.2 43.3 70.4 45.2 16.84 96 44.3 64sort -r fileName //降序排序

uniq命令

uniq fieName//如果相鄰行文本重復(fù),只保留一行**Input**00000101000202**Output**00010002 uniq -u fileName fieName//獲取行中與前后行都不同的行文本**Output**00uniq -d fileName fieName//獲取文本中前后相同的行文本**Output**000102uniq -c | cut -c7- fieName//獲取文本中的字段統(tǒng)計**Output**2 002 011 002 02uniq -ci | cut -c7- fieName//獲取文本中的字段統(tǒng)計,不區(qū)分大小寫如輸入**Input**aAAaAAaa**output**4 aA

paste命令

paste -d':' fileName1 fileName2 //將兩個文件按行合并,以':'分割paste -s fileName //將文本以'/t'為分隔符進行合并**Input**Albany, N.Y.Albuquerque, N.M.Anchorage, AlaskaAsheville, N.C.Atlanta, Ga.Atlantic City, N.J.Austin, TexasBaltimore, Md.Baton Rouge, La.Billings, Mont.Birmingham, Ala.Bismarck, N.D.Boise, IdahoBoston, Mass.Bridgeport, Conn.**Output**Albany, N.Y. Albuquerque, N.M. Anchorage, Alaska Asheville, N.C.Atlanta, Ga. Atlantic City, N.J. Austin, Texas Baltimore, Md. Baton Rouge, La. Billings, Mont. Birmingham, Ala. Bismarck, N.D. Boise, Idaho Boston, Mass. Bridgeport, Conn.paste - - - -d$'/t' fileName //將文本以'/t'為分隔符進行合并,每行三列**Input**Albany, N.Y.Albuquerque, N.M.Anchorage, AlaskaAsheville, N.C.Atlanta, Ga.Atlantic City, N.J.Austin, TexasBaltimore, Md.Baton Rouge, La.Billings, Mont.Birmingham, Ala.Bismarck, N.D.Boise, IdahoBoston, Mass.Bridgeport, Conn.**Output**Albany, N.Y. Albuquerque, N.M. Anchorage, AlaskaAsheville, N.C. Atlanta, Ga. Atlantic City, N.J.Austin, Texas Baltimore, Md. Baton Rouge, La.Billings, Mont. Birmingham, Ala. Bismarck, N.D.Boise, Idaho Boston, Mass. Bridgeport, Conn.paste -d';' -s fileName //將文本合并為一行,用';'分割**Output**Albany, N.Y.;Albuquerque, N.M.;Anchorage, Alaska;Asheville, N.C.;Atlanta, Ga.;Atlantic City, N.J.;Austin, Texas;Baltimore, Md.;Baton Rouge, La.;Billings, Mont.;Birmingham, Ala.;Bismarck, N.D.;Boise, Idaho;Boston, Mass.;Bridgeport, Conn.paste - - - -d';' //將文本合并為一行,用';'分割,每行三列**Output**Buffalo, N.Y.;Burlington, Vt.;Caribou, MaineCasper, Wyo.;Charleston, S.C.;Charleston, W.Va.

4.awk和sed命令使用

awk命令

1.輸出字段不全的文本行

a.通過第四列是否為空來判斷awk '{ if( $4 == "") { print "Not all scores are available for "$1 }}'b.通過列數(shù)是否小于4來判斷awk '{ if( NF < 4) { print "Not all scores are available for "$1 }}'輸入:A 25 27 50B 35 75C 75 78 D 99 88 76輸出:Not all scores are available for BNot all scores are available for C

2.判斷一個學生的成績是否幾及格

描述:A student is considered to have passed if (s)he has a score or more in each of the three subjects.輸入:A 25 27 50B 35 37 75C 75 78 80D 99 88 76輸出:A : FailB : FailC : PassD : Pass程序:a.循環(huán)遍歷每一個元素,小于50,輸出Failawk '{ flag=1; for(i=2;i<NF;i++) { if($i < 50) { print $1" : Fail"; flag=0; break; } } if(flag==1) { print $1" : Pass"; }}'b.幾乎相同的方法,awk對每一行的文本進行處理awk '{ if( $1 < 50 || $2 < 50 || $3 < 50) { print $1" : Fail" } else { print $1" : Pass" }}'

3.統(tǒng)計平均分,根據(jù)平均分輸出A、B、C或Fail 描述:Your task is to identify the performance grade for each student. If the average of the three scores is 80 or more, the grade is ‘A’. If the average is 60 or above, but less than 80, the grade is ‘B’. If the average is 50 or above, but less than 60, the grade is ‘C’. Otherwise the grade is ‘FAIL’. 輸入: A 25 27 50 B 35 37 75 C 75 78 80 D 99 88 76 輸出: A 25 27 50 : FAIL B 35 37 75 : FAIL C 75 78 80 : B D 99 88 76 : A 代碼:

//a.對每一行做處理awk '{ avg = ($4 + $2 + $3)/3; printf $0;printf" : "; if(avg < 50) print "FAIL"; else if(avg < 60) print "C"; else if(avg < 80) print "B"; else print "A";}'//$0表示整行,$1表示第一列,$2表示第二列

4.格式化輸出文本行 輸入: A 25 27 50 B 35 37 75 C 75 78 80 D 99 88 76 輸出: A 25 27 50;B 35 37 75 C 75 78 80;D 99 88 76 代碼:

a.使用awk偶數(shù)行輸出文本行回車,奇數(shù)行輸出文本和';'awk '{ if( NR%2 == 0 ) { printf $0"/n"; } else { printf $0";"; }}'b.使用paste命令來實現(xiàn)paste - - -d';' fileName

sed命令

1.將文本中首次出現(xiàn)的the替換為this

sed s/"the "/"this "/ fileName //"the "是因為防止將these替換為thissesed 's/thy /your /gi' fileName//替換所有的thy,不區(qū)分大小寫

2.將thy不區(qū)分大小寫地加{}強調(diào)表示

sed 's/thy/{&}/gi' fileName //{&} 加{}且輸出其本身

3.文本替換

將部分文本替換為****輸入:1234 5678 9101 1234 2999 5178 9101 2234 9999 5628 9201 1232 8888 3678 9101 1232輸出:**** **** **** 1234**** **** **** 2234**** **** **** 1232**** **** **** 1232a.sed -r -e 's/[0-9]{4} /**** /g' fileName 將四個數(shù)字和一個空格組成的子串替換為"**** "

4.將部分子串顛倒位置

輸入:1234 5678 9101 1234 2999 5178 9101 2234 9999 5628 9201 1232 8888 3678 9101 1232輸出:1234 9101 5678 1234 2234 9101 5178 2999 1232 9201 5628 9999 1232 9101 3678 8888sed -r 's/(.+ )(.+ )(.+ )(....)//4 /3/2/1/' fileName

grep命令

1.使用grep獲取匹配整個單詞的某行

grep -w "the" fileName //-w 匹配整個單詞grep -iw "the" fileName //不區(qū)分大小寫grep -ivw 'that' fileName //-v

2.匹配文本中包含the 、that 、then 和those的文本

grep -iw -e 'th[e,at,en,ose]' fileName或者grep -iw -e 'the' -e 'that' -e 'then' -e 'those' fileName

題目出處:hackerrank.com


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 乐安县| 乐都县| 东辽县| 吉安县| 东兰县| 和平县| 安阳县| 宽甸| 中方县| 浑源县| 遂川县| 阜平县| 邓州市| 灌南县| 金坛市| 盱眙县| 册亨县| 韶关市| 调兵山市| 镇远县| 阳高县| 北海市| 论坛| 蕲春县| 墨脱县| 闻喜县| 商城县| 邯郸市| 凌源市| 长兴县| 新郑市| 湖北省| 苏尼特右旗| 三江| 察雅县| 龙游县| 兰州市| 龙口市| 汶川县| 谢通门县| 翁牛特旗|