N26-第十五周

溫故知新
1、總結sed和awk的詳細用法;
sed stream EDitor 流編輯器,行級
sed  [option] …’script’ [input-file]
script 
地址定界編輯命令
常用選項
-n 靜默模式 ,不輸出模式空間中的內容至屏幕
-e script –expression ,多點編輯
-f /pat/to/sed-script 每行一個編輯命令的sed腳本
-r –regexp-extended 支持擴展正則表達式(默認是正則表達式)
-i 將直接修改原文件

地址定界
1、不給地址:空地址 對全文進行處理
2、單地址:

指定行

/pattern/ 被此模式匹配的所有行
3、地址范圍

,# 絕對地址范圍

,+# 相對地址范圍

,/pat1/  

$ 最后一行
/pat1/,/pat1/
4、步進 ~
1~2 所有奇數行
2~2 所有偶數行
編輯命令
d 刪除匹配到的字段或行
p 顯示匹配到的字段
a \text 在行后面追加文本text 支持使用\n進行多行追加
i \text 在行前面插入文本 支持使用\n進行多行追加
c \text  把匹配到的行替換為此處指定的文本
w /path/to/file 保存匹配到的行至指定文本中
r /path/from/file 讀取指定文件到當前文件被匹配到的行處
= 被匹配的行打印行號
! 條件取反;地址定界!編輯命令
s/// 查找替換,分隔符可自行指定
替換標記
g 全局替換
w /path/to/file 將替換成功的結果保存至指定文件中
p 顯示替換成功的行
高級編輯命令
h:把模式空間中的內容覆蓋至保持空間
H:把模式空間的內容追加至保持空間
g:把保持空間的內容覆蓋至模式空間中
G:把保持空間的內容追加至模式空間
x:互換保持空間內容和模式空間的內容
n 覆蓋讀取匹配的行的下一行至模式空間
N 追加讀取匹配到的行的下一行至模式空間中
d 刪除模式空間中的行
D 刪除多行模式空間中的所有行

awk,gawk
基本用法:
awk [option] ‘program’ FILE…
[option]
-F:指明輸入時用到的字段分割符(默認是空白字符)
-v var-value:自定義變量
$1,..$NF:內置變量,第一段。。。
$0:顯示整行
program:PATTERN{ACTION STATEMENTS}
語句之間用分號分割
此時的模式相當于地址定界
ACCTION
print,printf
變量替換時不能被引號包含
輸出命令:
1、print item1,item2 
多字段之間使用逗號分割
輸出時顯示的是空白符,輸出的item可以使字符串,數值,記錄的字段,變量,awk的表達式
如省略item,打印整行字符,相當于print $0
2、變量
內建變量:
FS:input field seperator:輸入時的分隔字符:默認是空白字符
OFS:output field seperator:輸出時的分隔字符:默認是空白字符
RS:input record seperator,輸入的換行符
ORS:output record seperator,輸出時的換行符
NF:number of field;字段數量
NR:number of record;文件行數
FNR:file number of record ;文件行數(對個文件單獨計數)
FILENAME:當前正在處理的文件文件名
ARGC:命令行參數個數
ARGV:數組,保存了命令行中給定的各參數
自定義變量:
1、-v var=value
變量名區分字符大小寫
2、PRORGARM定義

3、printf命令
格式化輸出: printf FORMAT, intem1,intem2….
1、FORMAT必須要給出
2、不會自動換行,需要顯式給出換行控制符,\n
3、FORMAT需要分別給后面的每一個item指定一個格式化符號
格式符:
%c:顯示字符的ASCII碼
%d,%i:顯示十進制證書
%e,%E:科學計數法數值顯示
%F:顯示為浮點數
%g,%G,以科學計數法或浮點數顯示數值
%s:顯示字符串
%u:無符號整數
%%:顯示%號
修飾符:

[.#]:第一個數字控制顯示的寬度(默認右對齊),第二個字符顯示小數點后的精度

%3.1f
– :左對齊
+ :顯示數值的符號
4、操作符
算數操作符
+加 -減 乘 /除 ^乘方 %取模
字符串操作符:沒有符號的操作符,表示字符串連接
賦值操作符
=,+=.-=,
=,%=,^=,/=
++,–
比較操作符
>,<,<=,>=,!=,==
模式匹配符
~ 左側的字符串是否匹配右側字符串
!~ 不匹配
邏輯操作符
&&
||
!
函數調用
funciton_name(argu1,argu2)
條件表達式
selector?if-ture-expression:if-false-expression

5、PATTERN
1、empty:空模式:處理文本的每一行
2、/regular expression/ :正則表達式:僅處理能夠被匹配到的行
3、relational expression :關系表達式,結果有真有假,結果為才被處理
真:結果為非0值,非空字符串
4、line ranges:行范圍
startline,endline:/part1/,/part2/
注意:不支持直接給出數字的格式

5、BEGIN/END模式
BEGIN{} :表示僅在開始處理文件中的每一行文本之前執行一次的程序
END{} :表示僅在文本處理完成之后執行一次

6、常用的ACTION
1、EXPRESSIONS:表達式
2、control statements:控制語句:if,while等
3、compound statements:組合語句
4、input statements
5、output statements
7、控制語句
if(condition){statements}
if(condition){statements}else{statements}
使用場景:對awk取得的整行或某個字段做條件判斷;
示例:
~]# awk -F: ‘{if($3>=1000) {printf “Common user: %s\n”,$1} else {printf “root or Sysuser: %s\n”,$1}}’ /etc/passwd
~]# awk -F: ‘{if($NF==”/bin/bash”) print $1}’ /etc/passwd
~]# awk ‘{if(NF>5) print $0}’ /etc/fstab
~]# df -h | awk -F[%] ‘/^\/dev/{print $1}’ | awk ‘{if($NF>=20) print $1}’
while(condition){statements}
條件“真”,進入循環;條件“假”,退出循環;
使用場景:對一行內的多個字段逐一類似處理時使用;對數組中的各元素逐一處理時使用;
示例
~]# awk ‘/^[[:space:]]linux16/{i=1;while(i<=NF) {print $i,length($i); i++}}’ /etc/grub2.cfg
~]# awk ‘/^[[:space:]]
linux16/{i=1;while(i<=NF) {if(length($i)>=7) {print $i,length($i)}; i++}}’ /etc/grub2.cfg
do {statements} while condition
意義:至少執行一次循環體
for(expr1;expr2;expr3){statements}
特殊用法
能夠遍歷數組中的元素;
語法:for(var in array) {for-body}
switch語句
語法:switch(expression) {case VALUE1 or /REGEXP/: statement; case VALUE2 or /REGEXP2/: statement; …; default: statement}
break
continue
next
提前結束對本行的處理而直接進入下一行
awk -F: ‘{if ($3%2!=0) next; print $1,$3}’ /etc/passwd
delete array[index]
exit
{statements}
8、array
支持關聯數組:array[index-expression]
index-expression
1、可使用任意字符串,字符串需要使用雙引號
2、如果某數組元數事先不存在,在引用時,awk會自動創建此元素,并將其值初始化為空(若要判斷數組中是否存在某元素,要使用 “index in array”格式進行
3、要遍歷數組中的每一個元素,要使用for循環
for(var in array) {for-body}
var會遍歷array的每個索引
9、函數
內置函數
常用:
1、數值處理
rand():第一次使用時返回0和1之間的一個隨機數,以后都是此數值
2、字符串處理
length([s]):返回指定字符串的長度
sub(r,s,[t]):以r表示的模式來查找t所表示的字符中的匹配的內容,并將其第一次出現替換為s所表示的內容
gsub(r,s,[t]):以r表示的模式來查找t所表示的字符中的匹配的內容,并將其所有出現均替換為s所表示的內容;
split(s,a[,r]):以r為分隔符切割字符s,并將切割后的結果保存至a所表示的數組中;

2、刪除/boot/grub/grub.conf文件中所有行的行首的空白字符;
[root@localhost ~]# sed -n /^[[:space:]]/p grub.conf 
root (hd0,0)
kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-358.el6.x86_64.img
[root@localhost ~]# sed -i  ‘s/^[[:space:]]//’ grub.conf 
3、刪除/etc/fstab文件中所有以#開頭,后跟至少一個空白字符的行的行首的#和空白字符;
[root@localhost ~]# sed -i  ‘s/^#[[:space:]]
//’ fstab 
4、把/etc/fstab文件的奇數行另存為/tmp/fstab.3;
[root@localhost ~]# sed -n ‘ 1~2w  /tmp/fstab.3’ /etc/fstab 

5、echo一個文件路徑給sed命令,取出其基名;進一步地,取出其路徑名;
[root@localhost ~]# echo “/usr/local/mysql/mysql.sh/” | sed -r  ‘s@^/./([^/]+)/?$@\1@’
mysql.sh
[root@localhost ~]# echo “/usr/local/mysql/mysql.sh” | sed  ‘s/.
\///’
mysql.sh
[root@localhost ~]# echo “/usr/local/mysql” | sed -r  ‘s@^(/.*/)[^/]+/?$@\1@’
/usr/local/

6、統計指定文件中所有行中每個單詞出現的次數;
]# awk ‘{ for (i=1;i<NF;i++){count[$i]++}}END{for(i in count) {print i,count[i]}}’ /etc/fstab 
7、統計當前系統上所有tcp連接的各種狀態的個數;
]# netstat -tna| awk ‘/^tcp\>/ {state[$NF]++}END{for (i in state) {print i,state[i]}}’
8、統計指定的web訪問日志中各ip的資源訪問次數:
[root@VS27 CCTV4]# awk ‘{ip[$1]++}END {for (i in ip){print i,ip[i]}}’ /var/log/access.log
9、寫一個腳本:定義一個數組,數組元素為/var/log目錄下所有以.log結尾的文件的名字;顯示每個文件的行數;

!/bin/bash

declare -a LOG
LOG1=ls /var/log/*.log
LOG=($LOG1)
echo ${#LOG[@]}
echo ${LOG[@]}
for i in ${LOG[*]}; do
awk ‘END {print FILENAME,NR}’ $i
done

10、寫一個腳本,能從所有同學中隨機挑選一個同學回答問題;進一步地:可接受一個參數,做為要挑選的同學的個數;

!/bin/bash

declare -a NAME
NAME=(one two three four five six seven )
if [ $1 <= ${#NAME[@]} ]; then
 if [  -z $1 ] ;then
NUM=expr &nbsp;$RANDOM % ${#NAME[@]}
echo ${NAME[$NUM]}
 else
for ((i=1;i<=$1;i++));do
NUM=expr $RANDOM % ${#NAME[@]}
CHIOSE[$i]=${NAME[$NUM]}
NAME[$NUM]=${NAME[${#NAME[]} – 1]}
unset NAME[$[${#NAME[@]} – 1]]
done

echo ${CHIOSE[@]}
 fi
else
 echo “your chiose is too big”
 exit 1
fi

11、授權centos用戶可以運行fdisk命令完成磁盤管理,以及使用mkfs或mke2fs實現文件系統管理;
    [root@localhost ~]# vim /etc/sudoers
centos  ALL=(root)      NOPASSWD: /sbin/fdisk, /sbin/mke2fs, /sbin/mkfs

12、授權gentoo用戶可以運行邏輯卷管理的相關命令;
[root@localhost ~]# visudo 
Cmnd_Alias LVADMINS_CMD=/sbin/lvchange,/sbin/lvdisplay,/sbin/lvmchange,/sbin/lvmdiskscan,/sbin/lvmsadc,/sbin/lvremove,
/sbin/lvs,/sbin/lvconvert,/sbin/lvextend,/sbin/lvmconf,/sbin/lvmdump,/sbin/lvmsar,/sbin/lvrename,/sbin/lvscan,/sbin/lv
create,/sbin/lvm,/sbin/lvmconfig,/sbin/lvmetad,/sbin/lvreduce,/sbin/lvresize,/sbin/pvchange,/sbin/pvck,/sbin/pvcreate,
/sbin/pvdisplay,/sbin/pvmove,/sbin/pvremove,/sbin/pvresize,/sbin/pvs,/sbin/pvscan,/sbin/vgcfgbackup,/sbin/vgck,/sbin/v
gdisplay,/sbin/vgimport,/sbin/vgmknodes,/sbin/vgrename,/sbin/vgsplit,/sbin/vgcfgrestore,/sbin/vgconvert,/sbin/vgexport
,/sbin/vgimportclone,/sbin/vgreduce,/sbin/vgs,/sbin/vgchange,/sbin/vgcreate,/sbin/vgextend,/sbin/vgmerge,/sbin/vgremov
e,/sbin/vgscan                #使用命令別名LVADMINS_CMD定義相關的命令

gentoo          ALL=(ALL)       NOPASSWD:LVADMINS_CMD
13、基于pam_time.so模塊,限制用戶通過sshd服務遠程登錄只能在工作時間進行;
[root@localhost ~]# vim /etc/security/time.conf 
sshd;
;!root;MoTuWeThFr0900-1800  
[root@localhost ~]# vim /etc/pam.d/sshd
account     required     pam_time.so 
14、基于pam_listfile.so模塊,定義僅某些用戶,或某些組內的用戶可登錄系統;
[root@localhost ~]# vim /etc/sshd_userlist
root
user1
user2
[root@localhost ~]# chmod 600 /etc/sshd_userlist 
[root@localhost ~]# chown root /etc/sshd_userlist 
[root@localhost ~]# vim /etc/pam.d/sshd
auth        required pam_listfile.so item=user sense=allow file=/etc/sshd_userlist onerr=succeed

原創文章,作者:胡安慧,如若轉載,請注明出處:http://www.www58058.com/78307

(0)
胡安慧胡安慧
上一篇 2017-08-23
下一篇 2017-08-24

相關推薦

  • ELK-5.5.1部署

    ELK簡介 ELK Stack是軟件集合Elasticsearch、Logstash、Kibana的簡稱,由這三個軟件及其相關的組件可以打造大規模日志實時處理系統。 其中,Elasticsearch 是一個基于 Lucene 的、支持全文索引的分布式存儲和索引引擎,主要負責將日志索引并存儲起來,方便業務方檢索查詢。 Logstash是一個日志收集、過濾、轉發…

    2017-12-04
  • 概述Windows2003的卷影副本

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://jeffyyko.blog.51cto.com/28563/157940      卷影副本,也就是Volume Shadow Server簡單來講,卷影副本(或稱為VSS)可以簡單…

    Linux干貨 2015-03-25
  • Linux 登錄趣事

    初入Linux運維,在虛擬機VMware12中裝載CentOS6和CentOS7,均帶有圖形化界面。簡單熟悉Linux,發現了一些關于登錄的趣事,在此與大家分享。 運行環境:CentOS6和CentOS7 工具:系統里的terminal 登錄趣事(以CentOS6為例): (1)自動登錄圖形化界面 每次啟動CentOS6,短暫等待之后便會進入登錄界面,然后選…

    2017-07-15
  • N22-妙手-第七周課程練習

    1、創建一個10G分區,并格式為ext4文件系統;    (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; [root@localhost ~]# mke2fs -t ext4 -m 2 -L MY…

    Linux干貨 2016-10-09
  • Linux發行版的基礎目錄名稱命名法則及功用規定

    [root@localhost /]# tree -L 1. <—-> 為 / 符號,所有文件的根目錄;├── bin -> usr/bin <—-> 所有用戶可用的基本命令程序文件;├── boot <—-> 引導加載器必須用到的各靜態文件:kernel,initramfs(in…

    2018-02-28
  • ansible之Playbook中tags使用

    示例:httpd.yml– hosts: websrvsremote_user: roottasks:– name: Install httpdyum: name=httpd state=present – name: Install configure filecopy: src=files/httpd.conf des…

    Linux干貨 2018-01-14
欧美性久久久久