正则表达式对于系统管理来说是必备的知识点,可以说是基础中的基础,本章只是很简单的介绍了一下。
第十章、第十一章的相关字符处理的内容多放到这边来了
字符串处理
grep、sed 取行
cut、 awk 取字段cut:
echo $PATH | cut -d ‘:’ -f 3,5 以:为分隔符 区第3个和第5个字段
echo $PATH | cut -c 3- 从第三个字符开始取后面所有的字符
awk:
cut处理不了多个空格为分隔符的数据,awk则可以处理
awk命令格式:awk ‘ ‘cat /etc/passwd | awk ‘BEGIN {FS=”:”} $3 < 10 {print $1 “\t” $3}’
条件 以:为分隔符 只要第3个字段<10 屏幕显示 第一个和第三个字段
第一个和第3个字段中间tab隔开其中BEGIN 是为了能从第一行开始处理,不加BEGIN则从第二行开始处理
last | awk ‘{print $1 “\t lines:” NR “\t columes:” NF } ‘
tab+文字 awk在处理第几行 每一行有多少个字段
grep:
last | grep -v ‘root’ 选择没有root的行(反向选择)
grep -n ‘[^g]oo’ test.txt 选择oo前面不含g的字符的行
grep -n ‘^[g]’ test.txt 选择有g开头的行
其中第二个很有意思:除了第一行其他多显示出来了。
grep -n ‘g.o’ test.txt .代表有任意一个字符,必须有1个字符
grep -n ‘go*‘ test.txt *代表有0个或多个重复的前面的字符。如g、go、goo、gooo等等
.*就是0个或多个任意字符
grep -n ‘go\{2,5\}’ test.txt 代表有2个指5个o的字符
-————————
egrep -n ‘go+d’ test.txt 扩展grep命令,+代表1个或多个o
egrep -n ‘go?d’ test.txt ?代表没有或者1个o
egrep -n ‘gd|good’ test.txt 选有gd或者有good的行 | 是或的意思,不是管道命令sed
先看printf命令
printf ‘ %10s\t %5i\t %8.2f \n ’ `cat printf.txt`
10个字符+tab 5个整数+tab 8个整数2个小数点+换行 先cat,在printf
nl /etc/passwd | sed ‘2a test’ 在第3行加入 test为内容的一行。2a就是在第二行下面一行
nl /etc/passwd | sed ‘2i test’ 在第二行加入test为内容的一行。
2i就是在第二行上面加一行,加入后test就是第二行了
nl /etc/passwd | sed ‘2,5c test’ 把第二至第五行替换为test
ifconfig eth0 | grep ‘inet’| \
sed ‘ s / ^.*addr: / / g’ | sed ‘s/Bcast.*$//g’
s表示替换 /格式 要替换的内容 /格式 替换为空 /格式 g表示结束
cat /etc/passwd | sed -e ‘4d’ -e ‘6c no six line’ > /tmp/test/passwd
-e表示在直接在当前命令行上处理
4d 就是删除第4行
6c 就是把第6行替换为 no six line
字符转换命令
unix2dos、dos2unix:文档格式转换。
dos2unix -n old new n表示保留旧文件
unix和ms的字符格式是不一样的:unix是$
MS是M$
tr:替换、删除字符串
tr默认是替换命令
last | tr ‘[a]‘ ‘[A]‘ :a替换为A
tr -d 删除字符
cat /etc/passwd | tr -d ‘:’ :删除:
col:tab转为空格
col -x
expand:tab转为空格,转成多少个空格可以自定义
enpand -t 4
join:2个文件,如果第一个字段一致,就粘成同一行,且第一个字段放在第一个
join -t ‘:’ /etc/passwd /etc/shadow
以:作为分隔符,比较第一个字段,
如root这一行:
2个文件的第一个字段都是root,所以就把2个文件的root这一行合并在一起,
并且把第二个文件的root删除,只保留第一个文件的root,并且放在最前面/etc/passwd root:x:0:0:root:/root:/bin/bash
/etc/shadow root:$1$tl3LqaXl$7CJiLfD9fbWtPjDluR1TT0:15594:0:99999:7:::
join后 root:x:0:0:root:/root:/bin/bash:$1$tl3LqaXl$7CJiLfD9fbWtPjDluR1TT0:15594:0:99999:7:::paste:2个文件的内容粘在一起。默认tab分隔
paste /etc/passwd /etc/shadow
paste后 root:x:0:0:root:/root:/bin/bash root:$1$tl3LqaXl$7CJiLfD9fbWtPjDluR1TT0:15594:0:99999:7:::
其他重要命令
排序命令
sort:排序
cat /etc/passwd | sort -t ‘:’ -k 3 以:为分隔符,以第3个字段进行排序
uniq:重复的仅显示一次
last | cut -d ‘ ‘ -f 1 | sort | uniq 以空格为分隔符,取第一个字段,进行排序,再把重复的删除只留一个
wc:就是对文件的字数、行数、 字符数进行统计
cat /etc/passwd | wc 显示字数、行数、字符数,其中行数不包括空行
split:拆分命令(很有用)
split -b 300k /tmp/termcap /tmp/1/term 拆分
显示结果:terma termb termc
cat term* >> termcap 合并
xargs:参数代换
把前面的结果作为参数给后面的命令用
cat “$accountfile” | cut -d ‘:’ -f1 | xargs -n 1 useradd -m
把前面的用户名,每次一位的取给后面的useradd命令做参数用
也就是
for ((i=1;i<=n;i++))do
useradd -m f1
done
xargs -n 3 finger
-n 就是一次取3个参数,也就是 finger 参数1 参数2 参数3 。然后循环的取直到取完结束。
xargs -p finger
-p就是询问y 还是n
diff:以行为单位比较
diff /etc /tmp/test
cmp:以字符为单位比较
cmp /etc/passwd /tmp/test
patch:打补丁命令
pr:打印
pr /etc/passwd