概述:本文主要介绍CentOS 6.5下的一些基本命令的使用,包括正则表达式中特殊符号的含义、vi编辑器和文本分析工具awk的使用等,并给出命令的具体使用示例。
1、正则表达式
(1) ^(开头)、$(结尾)、|(或)、<(单词边界)、>(单词边界)、.、*、+、?的使用
需要使用\转义的符号:{、},(、),|、<、>、? 使用grep -E时可以不使用\转义上述符号
假设文件内容为test.txt
ooxx12123
ooxx 121222322
oxx 1234
123 ooxx
oo1243
oo123xxx
$1239x
dfjdfkloxoo3
dfffffffooo4
ooxx 1234
1234 helloworld
hhh xxoo
IPADDR=127.0.0.1
eg1:四位数字的匹配
grep -E "[^0-9][0-9]{4}[^0-9]" test.txt
#上面的方式具有局限性
grep "\(^[0-9]|[^0-9][0-9]\)[0-9]\{2\}[0-9]$|\([0-9][0-9^]\)" test.txt
#或
grep -E "(^[0-9]|[^0-9][0-9])[0-9]{2}[0-9]$|([0-9][0-9^])" test.txt
2、替换、切分与排序
. ,$s/oo/yy/
#全文替换(行内只替换第一个匹配的)
%s/oo/yy/
#行内匹配的都替换掉(i表示忽略大小写)
%s/oo/yy/g
%s/oo/yy/gi
#若查找内容包含/,则改用@替换之
%s#/a#/b#
. ,$s%/b%/b%
#删除文件内容
. ,$d
#或
dG
#恢复文件内容
u
#删除1到倒数第二行数据
1,$-2d
#复制3到第九行
3,9y
#粘贴
p
#切分文件
#输出指定列(按某种分隔符)
#显示第一列
cut -d' ' -f1 test.txt
#显示第二列
cut -d' ' -f1,2 test.txt
#显示1-3列
#不显示没有分隔符的行
cut -d' ' -f1,2 -s test.txt
#排序
sort ../etc/hosts
#指定第二列排序
sort -t' ' -k2 ../etc/hosts
#指定数值排序
sort -t' ' -n -k1 ../etc/hosts
#指定数值排序(大->小)
sort -t' ' -n -r -k1 ../etc/hosts
#单词统计(末尾$也算)
cat -A test.txt
wc test.txt
3、行编辑器sed
#显示所有行
sed "2p" test.txt
#显示第二行
sed -n "2p" test.txt
#删除第二行(修改原文件i)
sed "2d" test.txt
#删除第二行
sed -i "2d" test.txt
#第二行后增加数据(不修改原文件)
sed "2a\hello,hadoop" test.txt
#第二行前增加数据(修改原文件)
sed -i "2i\hello,hadoop" test.txt
#替换、删除
sed "s/hadoop/Hadoop/" test.txt
sed "/hello,/d" test.txt
#应用1
sed "s/[0-9]/8/" test.txt
sed "s/id:[0-9]:initdefault:/8:initdefault:/" test.txt
#使用选择符: \1表示第一个括号内的内容,\2同理
sed "s/\(id:\)[0-9]\(:initdefault:\)/\18\2/" test.txt
#变量的使用
num=100
echo $num
set "s/\(id:\)[0-9]\(:initdefault:\)/\1\$num\2/" test.txt
#应用2-----修改ip
#假设文本值为:
...
DEVICE=eth0
#HWADDR=00:0C:29:BD:89:6C
TYPE=Ethernet
#UUID=2600518b-aaaf-4f8f-9c67-b6fb1c6d0625
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.3.101
NETMASK=255.255.255.0
GATEWAY=192.168.3.2
DNS1=114.114.114.114
DNS2=8.8.8.8
DNS3=8.8.4.4
#方式一
sed "s/\(IPADDR=\([0-9]\?[0-9][0-9]\?\.\)\{3\}\).*/\188/" test.txt
#方式二
sed "s/\(IPADDR=\(\([0-9]\|[1-9][0-9]\|1[0-9][0-9]\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\).*/\199/" test.txt
4、文本分析 awk
#拷贝文件
cp ../etc/passwd password
#分割(CUT)方式显示账户(匿名函数打印第一列)
awk -F':' '{print $1}' password
#或
cut -d':' -f1 password
#在上述命令基础上首尾再增加一行数据,以制表符分割
awk -F':' '{print $1 "\t" $7}' password
awk -F':' 'BEGIN{print "username\tshell"}{print $1 "\t\t" $7}END{print "admin\t\t/mbin/mbash"}' password
#搜索root所在行
awk '/root/{print $0}' password
#统计每行行号(NR)、每行列数(NF)、每行内容($0)
#awk默认按空格和制表符分割(-F':'表示按:分割)
awk -F':' '{print NR "\t" NF "\t" $0}' password
#应用:报表统计
#统计报表:合计每人1月工资,0:manager,1:worker
#awk.txt
Tom 0 2012-12-11 car 3000
John 1 2013-01-13 bike 1000
vivi 1 2013-01-18 car 2800
Tom 0 2013-01-20 car 2500
John 1 2013-01-28 bike 3500
#
awk '{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5}}END{for(i in name){print i "\t" name[i]}}' awk.txt
#
awk '{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5};if($2=="0"){role[$1]="manager"}else{role[$1]="worker"}}END{for(i in name){print i "\t" role[i] "\t" name[i]}}' awk.txt
#使用awk.sh运行
{
split($3,date,"-");
if(date[2]=="01"){
name[$1]+=$5
};
if($2=="0"){
role[$1]="manager"
}else{
role[$1]="worker"
}
}
END{
for(i in name){
print i "\t" role[i] "\t" name[i]
}
}
#运行 -f
awk -f awk.sh awk.txt
5、用户管理
(1)用户增删
useradd test01
useradd test02
#修改密码
passwd test01
passwd test02
userdel test01
rm -rf ../home/test01
rm -rf ../var/spool/mail/test01
(2) 权限设置
#root /目录下创建文件夹
mkdir share
#test01 进入share目录,创建文件将受限
vi ../share.txt
#授予权限
groupadd share
usermod -G share test01
#修改属组,为属组用户添加读权限
chown root:share share/
chmod g+w share/
#移除其他用户的执行权限,此时其他用户需要退出重新登录方生效
chmod o-rx share/
#test01在share下创建share1.txt
vi /share/share.txt
#test02在share下创建share2.txt
vi /share/share2.txt
#开放各自创建的文件权限实现文件共享
#test01用户下,这里o代表root,实际上对root无效
chown :share share.txt
chmod o-r share.txt
#test02用户下
chown :share share2.txt
chmod o-r share2.txt
说明:
-
wrx对应值分别为:421
-
对于目录文件,要让其他用户访问需要设置x(1)权限!!