1.awk給輸出的字段加單引號。(下面輸出的第三個字段都加上了引號)awk -v aa="'" '{print $1,$2, aa $3 aa}' filename例子:[root@WANGJIAN ~]# awk -v aa="'" '{print $1,aa $2 aa}' filea '13'b '1'2.刪除兩列之間多個不等空格使成為兩列中間只有一個空格的規范格式方法1:cat filename |tr -s ' ' 方法2: cat filename |sed 's/ \{2,\}/ /g'例子:[root@WANGJIAN ~]# cat aa 13b 1c 23d 234[root@WANGJIAN ~]# cat a | tr -s ' ' #注意引號里有空格a 13b 1c 23d 234[root@WANGJIAN ~]# cat a | sed 's/ \{2,\}/ /g' #注意空格a 13b 1c 23d 2343.將一列的轉換成一行(本例是指第一列,也同理換成其他列)awk '{printf "%s",$1}' filename例子:[root@WANGJIAN ~]# cat filea 13b 1c 23d 234[root@WANGJIAN ~]# awk '{printf "%s", $1}' fileabcd補充:合并上下行并以空格相分隔sed '$!N;s/\n/ /' #合并上下兩行cat file12345678900987654321執行命令后1234567890 09876543214.用awk給定的分隔符格式化輸出[root@WANGJIAN ~]# echo a b c |awk '{print $1":"$2":"$3}'a:b:c[root@WANGJIAN ~]# echo a b c |awk '{OFS=":";print $1,$2,$3}'a:b:c5.用某一文件的一個域替換另一個文件中的的特定域(條件是兩個文件第一列相同)該例是用linux shadow文件中的密文部分替換passwd中的"x",生一個新passwd文件,如下所示文件passwd: s2002408030068:x:527:527::/home/dz02/s2002408030068:/bin/pw 文件shadow: s2002408030068:$1$d8NwFclG$v4ZTacfR2nsbC8BnVd3dn1:12676:0:99999:7::: awk 'BEGIN{OFS=FS=":"} NR==FNR{a[$1]=$2}NR>FNR{$2=a[$1];print}' shadow passwdNR==FNR,第一個文件shadow,以$1為下標,將$2的值賦給數組aNR>FNR,第二個文件passwd,將文件shadow$2的值賦值給文件passwd6.編寫一個sed命令,給一個文件的行間距變為兩倍行距sed '$!G;$!G' filename7.常見sed等價命令basename sed 's/\(.*\)\/\([^/]*\)/\2/' or sed 's,.*/,,'cat sed '' or sed -n '1,$p' or sed '1,$!d'cat -s sed '/./,/^$/!d'cat -n sed '=' | sed 'N;s/\n/\t/;s/^/ &/' or sed '=' | sed '$!N;s/\n/ /'cat -E sed 's/$/\$/'cat -t sed 's/\t/^I/g'cut -c n sed 's/\(.\)\{n\}.*/\1/' or sed 's/^.\{(n-1)\}//g;s/\(.\)\(.*\)/\1/g'cut -c x-y sed 's/\(^.\{y\}\)\(.*\)/\1/g;s/^.\{(x-1)\}//'cut -d| -f6 sed 's/\(\([^|]*\)\|\)\{6\}.*/\2/'cp file1 file2 sed 'w file2' file1expand -t 1 sed 's/\t/ /g'dirname sed 's/\(.*\)\/\([^/]*\)/\1/' or sed 's,[^/]*$,,'grep patten sed -n '/patten/p' or sed '/patten/!d'grep -v patten sed -n '/patten/!p' or sed '/pateen/d'grep -n patten sed -n '/patten/{=;p}'| sed 'N;s/\n/:/'head sed -n '1,10p'head -1 sed -n '1p' or sed 'q'head -Number sed '1,Number!d' or sed 'Numberq'paste -s file1 file2 sed ':a;N;s/\n/\t/;ba;' file1 file2 | sed 's/\t\t/\n/'paste -sdstr sed ':a;N;s/\n/str/;ba'rev sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'tac sed -n '1! G;$p;h' or sed -n 'G;$p;h'tail -1 sed -n '$p' or sed '$!d'tail -Number sed ':t;$q;N;(Number+1),$D;bt'tail -f sed -u '/./!d'tr "\n" " " sed ':a;N;s/\n/ /;ba'tr "A-Z" "a-z" sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'tr "a-z" "A-Z" sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'8.將字符串進行割接顯示如將 hellohellohello 顯示為hellohellohello方法:echo "hellohellohello" |fold -w5echo hellohellohello|sed 's/\(.....\)/\1\n/g'echo hellohellohello|sed 's/\(.....\)/\1#/g'|tr '#' '\n'9.從右取字符串中的字符操作[root@localhost ~]# string="abcdefg"[root@localhost ~]# echo ${string:(-3)} #取efgefg[root@localhost ~]# echo ${string:(-1)}g[root@localhost ~]# echo ${string:(2)} #跳過前2個字符cdefg10.漢字按拼音排序[root@localhost ~]# cat str 的見上我人歐怕我下風那把長下在懊上的風個還見看 #未排序前[root@localhost ~]# cat str |sed 's/./&\n/g'|LC_ALL=C sort|tr '\n' ' '|tr -d ' ';echo#懊把長的的風風個還見見看那歐怕排前人上上未我我下下序在11.tr命令小結tr命令:tr "[a-z]" "[A-Z]" 轉換大小寫tr "@" "\n" 替換tr -d "a" 刪除tr -s "a" 相鄰重復的a 只保留一個[root@localhost ~]# echo abcde |tr -d "a"bcde[root@localhost ~]# echo abcde |tr "a" "#"#bcde[root@localhost ~]# echo aabcded |tr -s "a"abcded12.指定每一行的第幾次出現進行替換sed 's/old/new/n' filename[root@localhost ~]# cat shabcdddsadsfsfdiodsabcdljlsabc[root@localhost ~]# cat sh|sed 's/abc/ABC/1'ABCdddsadsfsfdiodsABCdljlsabc[root@localhost ~]# cat sh|sed 's/abc/ABC/2'abcdddsadsfsfdiodsabcdljlsABC[root@localhost ~]# 13. 為文件加行號輸出sed = filename|sed 'N;s/\n/:/'cat -n filenamenl filename[root@localhost ~]# sed = /etc/passwd|sed 'N;s/\n/:/' #可以指定分割符1:root:x:0:0:root:/root:/bin/bash2:bin:x:1:1:bin:/bin:/sbin/nologin3:daemon:x:2:2:daemon:/sbin:/sbin/nologin[root@localhost ~]# sed = /etc/passwd|sed 'N;s/\n/ /'1 root:x:0:0:root:/root:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologin14.打印文檔奇數行(隔行輸出)sed 'n;d'sed 'x;$!N;x'sed -n 'p;n'135715.打印偶數行(隔行輸出)sed -n 'n;p'sed '1d;n;d;'246816.用于計算的兩個命令 bc exprexpr 2 + 3 兩個數和運算符之間要有空格[root@localhost ~]# date +%d-2|bc 前兩天的日18計算的時候要有小數部分:echo "2/8" |bc -lecho $a*$b|bcecho "scale=2; 2/8" | bc -lawk 'BEGIN{printf "%.2f",2/8}' 可以指定保留小數點幾位
posted on 2012-04-24 23:26
kxbin 閱讀(602)
評論(0) 編輯 收藏 所屬分類:
轉發 、
Linux