第四周作業

文本工具知識

  • 文件內容: cat ,more,less
  • 文件截取:head,tail
  • 按列抽取:cut
  • 排序和統計:sort,wc
  • 按關鍵字抽取:grep

文件查看:cat,nl,tac,rev
cat [OPTION]... [FILE]...
-E:顯示行結束符$ -n:對顯示出的每一行進行編號
-A:顯示所有控制符
-b:非空行編號
-s:壓縮連續的空行成一行
nl
tac
rev

分頁查看文件內容
more:分頁查看文件
more [OPTIONS...] FILE...
-d: 顯示翻頁及退出提示
less:一頁一頁地查看文件或STDIN輸出
查看時有用的命令包括:
/文本 搜索 文本
n/N 跳到下一個 或 上一個匹配
less 命令是man命令使用的分頁器

顯示文本前或後行內容
head [OPTION]... [FILE]...
-c # 指定獲取前#字節
-n # 指定獲取前#行 -# 指定行數
tail [OPTION]... [FILE]...
-c # 指定獲取後#字節
-n # 指定獲取後#行 -# 同上
-f 跟蹤顯示文件fd新追加的內容,常用日誌監控
相當於 --follow=descriptor
-F 跟蹤文件名,相當於--follow=name --retry
tailf 類似tail –f,當文件不增長時並不訪問文件

按列抽取文本cut和合並文件paste
cut [OPTION]... [FILE]...
-d DELIMITER: 指明分隔符,默認tab
-f FILEDS:
#: 第#個字段
#,#[,#]:離散的多個字段,例如1,3,6
#-#:連續的多個字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
--output-delimiter=STRING指定輸出分隔符
顯示文件或STDIN數據的指定列
cut -d: -f1 /etc/passwd
cat /etc/passwd | cut -d: -f7
cut -c2-5 /usr/share/dict/words
paste 合併兩個文件同行號的列到一行
paste [OPTION]... [FILE]...
-d 分隔符:指定分隔符,默認用TAB
-s : 所有行合成一行顯示
示例:
paste f1 f2
paste -s f1 f2

收集文本統計數據wc
計數單詞總數、行總數、字節總數和字符總數
可以對文件或STDIN中的數據運行
wc story.txt
39 237 1901 story.txt
行數 字數 字節數
常用選項
-l 只計數行數
-w 只計數單詞總數
-c 只計數字節總數
-m只計數字符總數
-L 顯示文件中最長行的長度

文本排序sort
把整理過的文本顯示在STDOUT,不改變原始文件
sort [options] file(s)
常用選項
-r 執行反方向(由上至下)整理
-R 隨機排序
-n 執行按數字大小整理
-f 選項忽略(fold)字符串中的字符大小寫
-u 選項(獨特,unique)刪除輸出中的重複行
-t c 選項使用c做爲字段界定符
-k X 選項按照使用c字符分隔的X列來整理能夠使用多次

去重:uniq
uniq命令:從輸入中刪除前後相接的重複的行 uniq [OPTION]... [FILE]...
-c: 顯示每行重複出現的次數
-d: 僅顯示重複過的行
-u: 僅顯示不曾重複的行
注:連續且完全相同方爲重複
常和sort 命令一起配合使用:
sort userlist.txt | uniq -c
比較文件

比較兩個文件之間的區別
diff foo.conf foo2.conf
5c5
< use_widgets = no

use_widgets = yes
註明第5行有區別(改變)
複製對文件改變patch
diff 命令的輸出被保存在一種叫做“補丁”的文件中
使用 -u 選項來輸出“統一的(unified)”diff格式文件,最適用於補丁文件
patch 複製在其它文件中進行的改變(要謹慎使用)
適用 -b 選項來自動備份改變了的文件
diff -u foo.conf foo2.conf > foo.patch
patch -b foo.conf foo.patch

1、統計出/etc/passwd文件中其默認shell爲非/sbin/nologin的用戶個數,並將用戶都顯示出來

[root@centos6 ~]#grep -v '/sbin/nologin' /etc/passwd |wc -l
6
[root@centos6 ~]#grep -v '/sbin/nologin' /etc/passwd |cut -d: -f1
root
sync
shutdown
halt
mageia
slackware

2、查出用戶UID最大值的用戶名、UID及shell類型

[root@centos6 ~]#sort -n -k3 -t ':' /etc/passwd |tail -1|cut -d: -f1,3,7
slackware:2002:/bin/tcsh

3、統計當前連接本機的每個遠程主機IP的連接數,並按從大到小排序

[root@centos6 ~]#cat ss.log | tr -s " " ":" | egrep '[[:digit:]]' | cut -d ":" -f 6 | sort | uniq -c | sort -nr
     44 127.0.0.1
     10 113.234.28.244
      8 124.64.18.135
      6 45.62.217.224
      6 210.21.36.228
      6 106.38.128.110
      5 116.227.232.42
      4 59.46.213.114
      3 144.76.4.41
      2 5.9.70.117
      1 91.191.250.142
      1 66.249.66.158
      1 66.249.66.129
      1 61.151.178.165
      1 61.149.193.234
      1 61.136.204.138
      1 5.188.210.39
      1 40.77.189.81
      1 218.2.216.30
      1 202.100.205.245
      1 183.226.12.140
      1 180.174.58.237
      1 120.194.3.98
      1 117.136.38.134
      1 116.255.176.86
      1 112.33.255.134
      1 101.200.188.230
      1 100.100.110.61

4、編寫腳本 createuser.sh,實現如下功能:使用一個用戶名做爲參數,如果 指定參數的用戶存在,就顯示其存在,否則添加之;顯示添加的用戶的id號等 信息

[root@centos6 ~]#cat createuser.sh
#!/bin/bash
#使用一個用戶名做爲參數,如果指定參數的用戶存在,就顯示其存在,否則添加之;顯示添加的用戶的id號等信息

#定義變量
read -p "請輸入一個用戶名:" USERNAME
#判斷用戶名是否存在
if  `id $USERNAME &> /dev/null`;then
#    若存在,則顯示其存在,輸出ID等信息
echo "用戶存在,用戶的ID信息爲:`id $USERNAME`"
else
#    若不存在,則添加用戶,設置密碼爲隨機8位,下次登錄時提示修改密碼,同時顯示ID等信息
PASSWORD=`cat /dev/urandom |tr -cd [:alpha:] |head -c8`
`useradd $USERNAME &> /dev/null`
`echo "$PASSWORD" | passwd --stdin $USERNAME &> /dev/null`
echo "用戶名:$USERNAME 密碼: $PASSWORD" >> user.txt
`chage -d 0 $USERNAME`
echo "用戶已添加,用戶的ID信息爲:`id $USERNAME` 密碼爲:$PASSWORD"
fi

#刪除變量
unset name passwd
[root@centos6 ~]#source createuser.sh
請輸入一個用戶名:mageia
用戶存在,用戶的ID信息爲:uid=1100(mageia) gid=1100(mageia) groups=1100(mageia)
[root@centos6 ~]#source createuser.sh
請輸入一個用戶名:wang    
用戶已添加,用戶的ID信息爲:uid=2003(wang) gid=2003(wang) groups=2003(wang) 密碼爲:FEaLPYTT

5、編寫生成腳本基本格式的腳本,包括作者,聯繫方式,版本,時間,描述等

[root@centos6 ~]#cat .vimrc
set ignorecase
set cursorline
set autoindent
autocmd BufNewFile *.sh exec ":call SetTitle()"
func SetTitle()
    if expand("%:e") == 'sh'
    call setline(1,"#!/bin/bash") 
    call setline(2,"#") 
    call setline(3,"#********************************************************************") 
    call setline(4,"#Author:        Doonker") 
    call setline(5,"#QQ:            2719683191") 
    call setline(6,"#Date:          ".strftime("%Y-%m-%d"))
    call setline(7,"#FileName:      ".expand("%"))
    call setline(8,"#URL:           http://www.magedu.com")
    call setline(9,"#Description:       The test script") 
    call setline(10,"#Copyright (C):    ".strftime("%Y")." All rights reserved")
    call setline(11,"#********************************************************************") 
    call setline(12,"") 
    endif
endfunc
autocmd BufNewFile * normal G
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章