1. 程式人生 > >第一次摸底測試

第一次摸底測試

linux

title: 摸底考試
tags: linux,試題
grammar_cjkRuby: true

[TOC]

第一次摸底測試

1 已知text.txt,打印text.txt 中不包含oldboy的字符串

解答:先創造text.txt,假設text.txt裏面包含girl.oldboy,boy

cat >>text.txt<<EOF
girl
oldboy
boy

解法一:采用最簡單的head和tail命令

[root@server ~]# head -1 text.txt && tail -1 text.txt
girl
boy

解法二:采用grep -v排除模式

[root@server ~]# grep -v oldboy text.txt 
girl
boy

解法三:采用sed模式
sed 篩選字符串時的格式為 sed + option +‘/字符串/d‘
option有n 取消默認輸出,i 把結果寫入文件覆蓋源文件,r 用擴展正則表達式。
d 為命令刪除,p為打印,類似與復制一份

[root@server ~]# sed  ‘/oldboy/d‘ text.txt   
girl
boy

解法四:采用awk模式
awk 的標準模式是: awk -F ‘ ‘ ‘{print $1}‘
F後面是分隔符,NR行號,$1是指第一列,awk擅長取列,sed擅長取行。
$1 "="$2 其中=號為打印出來的分隔符

$(NF):最後一列,$(NF-1)倒數第二列
NR=行號

[root@server ~]# awk -F " " ‘NR==1 || NR==3  {print $1}‘ text.txt
girl
boy

解法五:采用sed 取行的方法

[root@server ~]# sed ‘2d‘ text.txt 
girl
boy
或者
[root@server ~]# sed -n ‘1p‘ text.txt && sed -n ‘3p‘ text.txt  
girl
boy

2 假設tmp上存在file文件,從/etc/上復制一個file文件到/tmp上,不提示用戶是否覆蓋,需要使用cp命令且不使用f參數

解答:因為默認cp命令是存在別名的,從alias中可以看到。

[root@server ~]# alias cp
alias cp=‘cp -i‘

解法一:使用命令的絕對路徑
/bin/cp /etc/file1 /tmp
解法二 :使用\反斜線脫馬甲
\cp /etc/file1 /tmp
解法三: unalias cp
cp /etc/file1 /tmp
查看命令絕對路徑的方法:

[root@server ~]# find / -type f -name "cp"
/bin/cp
[root@server ~]# which cp
alias cp=‘cp -i‘
        /bin/cp
[root@server ~]# 
[root@server ~]# whereis cp
cp: /bin/cp /usr/share/man/man1/cp.1.gz

3 查看ett.txt文件第20-30行內容

解答:先生成文件
seq 100 &gt;ett.txt
解答一:[root@server ~]# head -30 ett.txt|tail -11
解答二:[root@server ~]# tail -81 ett.txt |head -11
解答三:[root@server ~]# grep 25 -C 5 ett.txt
解答四:[root@server ~]# sed -n ‘20,30p‘ ett.txt
解答五:<br/>[root@server ~]# awk -F ‘ ‘ ‘{if (NR&lt;31 && NR&gt;19) print $1}‘ ett.txt
註意 :如果NR前面有條件語句則if (NR<31 && NR>19)寫在{}裏面,否則NR寫在{}外面,如‘NR==3 {print $4}‘

[root@server ~]# ifconfig eth0 | awk -F ‘[ :]+‘ ‘{if (NR>1 && NR<3) print $4}‘
192.168.50.1
[root@server ~]# ifconfig eth0 | awk -F ‘[ :]+‘ ‘NR==2 { print $4}‘                   
192.168.50.1

4 假如/tmp上有file1...file5,5個文件,文件上均含有oldboy,請問怎麽將5個文件裏的oldboy改為oldgirl?

解答,先創建文件file1和file5

cd /tmp &&touch file{1..5}
[root@server tmp]# find ./ -type f -name "file*" |xargs sed -i ‘s#.*#oldboy#g‘
[root@server tmp]# find ./ -type f -name "file*" |xargs sed  ‘s#oldboy#oldgirl#g‘ 
oldgirl
oldgirl
oldgirl
oldgirl
oldgirl
[root@server tmp]# 
[root@server tmp]# 
[root@server tmp]# 
[root@server tmp]# find ./ -type f -name "file*" |xargs sed -i ‘s#oldboy#oldgirl#g‘
[root@server tmp]# cat file1
oldgirl
[root@server tmp]# 

第一次摸底測試