鸟哥基础第十二章

正则表达式对于系统管理来说是必备的知识点,可以说是基础中的基础,本章只是很简单的介绍了一下。
第十章、第十一章的相关字符处理的内容多放到这边来了

字符串处理

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开头的行

鸟哥基础第十二章 - leaf - ------坚持雅操------

 其中第二个很有意思:除了第一行其他多显示出来了。

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$

鸟哥基础第十二章 - leaf - ------坚持雅操------

 

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