程式設計必知的10個Unix命令技巧

edithfang發表於2015-01-08
Unix命令為我們的工作提供了極大的便利。這裡分享10個Unix命令小竅門,讓我們一起將大工作量變得更快速。

檔案每一行顯示最後一個字

如果你知道$NF,這個技巧就相對簡單。

awk '{print $NF}
awk -F: '{print $NF}'


NF程式設計代表欄位數(e.g., 5),因此,$NF 代表欄位值 (e.g., $5)。

$ cat numbers
1 2 3 4 5
one two three four five
$ awk '{print $NF}'numbers
5
five


這個技巧,在列印檔案最右邊的字時很有幫助,即使是每行包含不同字數的詞,也可用。如果你想列印其他行末的詞,也可以使用NF作為欄位選項的錨。在這個命令中,我們使用NF-1選擇最後一個欄位.

$ awk '{print $(NF-1)}'numbers
4
four

刪除Nth行

從檔案中刪除特定行應該是一個很簡單的操作。在下面的例子中,確保是1到11的檔案數,一個數字一行。使用命令,像是,第七行像是,"7d"命令就是刪除第七行,示例如下:

$ sed -i '7 d'numbers
$ cat numbers
1
2
3
4
5
6
8
9
10
11


你可以使用範圍刪除一個序列行,命令是【sed -i '7,9 d' numbers】,意思是刪除7至9行。

刪除空白行

刪除檔案中的空白行方法有很多,我使用最簡單的一個。在下面的命令中,使用 ^$代替行空白。^ 代表一行的開始,$ 代表一行的結束,因此,一行的開始結束中,沒有東西,為空白。

$ cat strings
This is the last day
of your life thus far
 
Mr. Logic
$ sed -i '/^$/d'strings
$ cat strings
This is the last day
of your life thus far
Mr. Logic


使用 sed命令(如下),可以刪除空白行並備份原檔案。

$ perl -i.bak -n -e'print if /\S/'strings
$ ls -l strings*
-rw-r----- 1 shs faculty 53 Jan 4 2015 strings
-rw-r----- 1 shs faculty 54 Jan 4 18:36 strings.bak

值得注意的是,單個空白行刪除,檔案比原檔案要小一個字元。

尋找符號連結

Unix系統中找符號連結也很簡單,在查詢命令中一個按檔案型別查詢的選項。查詢符號連結的符號為"l"

$ find . -type l -ls
12763168 0 lrwxrwxrwx 1 shs staff 6 Jan 27 2013 ./hlinks/5 -> 5beers
12763423 0 lrwxrwxrwx 1 shs staff 4 Nov 23 2013 ./projects/tmp -> /tmp

查詢不指向當前檔案的符號連結

Unix系統可以建立不指向當前檔案的符號連結,建立後刪除原檔案也是可以的。也可以建立多個符號連結。可以用查詢命令和Perl命令追蹤他。

find . -type l -print | perl -nle '-e || print';

確定體系結構(32或64位)

使用以下命令:

$ arch
i686


該命令在 Linux 下也能用。當我在Solaris下使用時,得到答案"sun4"。

顛倒字元

rev命令一次性完全顛倒字元,你可以將文字改成這樣:

$ echo "dlroW ,olleH"| rev
Hello, World


也可以寫檔名,然後完全顛倒。

$ rev strings
yad tsal eht si sihT
raf suht efil ruoy fo
 
cigoL .rM

計算文字出現次數

我們要考慮幾個問題,一個詞可能在另一個詞中出現,比如"the"是"there"的一部分;一個詞也可能在一行裡多次出現。我們怎麼計算呢?使用【grep -c "word" filename 】命令,他也是和【grep word filename】做差不多的事。他只會告訴你字在每行出現的次數,而不是全部出現的次數,我們可以看看下面的程式碼:

$ cat words
the the the the the then there they
$ grep -c the words
1


另一種選擇,你可以這樣做:

#!/bin/bash
 
count=0
look4=$1
file=$2
 
forword in`cat $file`
do
if[ $word == "$look4"]; then
((count++))
fi
done
echo $count


在這個指令碼中,如果匹配我們所搜尋的,for迴圈可以讓我們看到每個字和增量數。不過該指令碼不一定通用。

用一個詞替換另一個詞

完成這個工作,我使用以下命令:

sed s/this/that/g filename


無論命令變得多複雜,你都可以在this,that間變換。我們來一個相對複雜的例子。使用 \b標記,確保將 "the" 變為 "why"。

$ cat words
the the the the the then there they
$ sed -e 's/\bthe\b/why/g'words
why why why why why then there they


看到了嗎"the"無論在多長的句子裡都沒變。

如果你想改變"The" 或者 "the",你可以使用下面的命令:

The why why why why then there they
$ sed -e 's/\bthe\b/why/gi'words
why why why why why then there they

從subshell標記可用變數

如果不匯出設定的shell,Subshells是不會認變數的。

$ cat showme
#!/bin/bash
 
echo $something
 
$ something="well done"
$ ./showme
 
$ export something
$ ./showme
well done
相關閱讀
評論(1)

相關文章