本系列会将《鸟哥的Linux私房菜-基础版》中的一些个人觉得比较有用的命令行单独摘出来,方便查阅
grep的各种骚操作
dmesg | grep -n --color=auto 'qxl'将捕捉到的关键字高亮,并且显示行号dmesg|grep -n -A3 -B2 --color-auto 'qxl'将关键字所在行的前两行和后三行一起高亮显示,带行号grep -vn 'the' regular_express.txt反向选择,列出没有’the’的行来grep -in 'the' regular_express.txt不分大小写列出所在行
关于行首与行尾字符^$
grep -n '^the' regular_express.txt找出只有在行首出现the的行grep -n '^[a-z]' regular_express.txt找出小写字母开头的行grep -n '^[^a-zA-Z]' regular_express.txt找出不是字母开头的行,注意第一个和第二个的意义不同,一个是行首的意思,一个是“非”的意思grep -n '\.$'以小数点结尾的行,注意这里的斜杠是转义,因为.在正则表达式中有其它含义grep -n '^$' regular_express.txt找出所有空白行(只有行首和行尾)grep -v '^$' /etc/rsyslog.conf -v '^#'找出文件中的有效配置行(既不是空白行,又不是#开头的注释)grep -n 'o\{2\}' regular_express.txt找出o连续出现两次的行。注意注意!!!这里大括号之所以加转义符,是因为大括号是Linux中的关键字!!!这点要小心!egrep -v '^$|^#' regular_express.txt这里的egrep相当于grep -e,单引号内的管道是or的关系。这条命令的意思是显示除去空行和行首为#的那些行
sed参数说明
[dmtsai@study ~]$ sed [-nefr] [动作]
- 选项与参数:
-n:使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到屏幕上。
但如果加上 -n 参数后,则只有经过 sed 特殊处理的那一行(或者动作)才会被列出来。
-e:直接在指令列模式上进行 sed 的动作编辑;
-f:直接将 sed 的动作写在一个文件内,-f filename则可以执行 filename 内的 sed 动作;
-r:sed 的动作支持的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i:直接修改读取的文件内容,而不是由屏幕输出。 - 动作说明:
[n1[,n2]]function
n1, n2:不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作
是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』
function 有底下这些咚咚:
a:新增, a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)
c:取代, c 的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行!
d:删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i:插入, i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
p:打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运作~
s:取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!
例如 1,20s/old/new/g 就是啦!
sed使用示例
nl /etc/passwd | sed '2,5d'将/etc/passwd中的内容列出并且打印行号,同时,将第2~5行删除nl /etc/passwd | sed '2d'只删除第2行nl /etc/passwd | sed '3,$d'删除从第3行到最后一行,$符代表最后一行nl /etc/passwd | sed '2a drink tea'会在第2行后面新增一行,内容为“drink tea”sed 's/要被取代的字符串/新的字符串/g'把这个格式背下来使用即可ifconfig en0 | grep 'inet' | sed 's/^.*inet //g'将en0网卡输入的信息中心,inet开头的那一行文字的“inet”字符串去掉ifconfig en0 | grep 'inet' | sed 's/^.*inet //g' | sed 's/ *netmask.*$//g'将IP地址前面的内容和后面的内容都删掉,只显示IPcat /etc/man_db.conf |grep 'MAN' | sed 's/#.*$//g'获取删掉#注释内容的有效内容cat /etc/man_db.conf |grep 'MAN' | sed 's/#.*$//g' | sed '/^$/d'获取删掉#注释内容的有效内容,并删除空白行(因为之前被删除掉的注释会变成空行)sed -i 's/\.$/\!/g' regular_express.txt将regular_express.txt这个文件中以.结尾的行的这个点换成感叹号,注意本命令会直接修改源文件,属于危险操作,慎用!
printf格式化打印参数
- 格式:
printf '打印格式' 实际内容 - 选项与参数:
关于格式方面的几个特殊样式:
\a警告声音输出
\b退格键(backspace)
\f清除屏幕 (form feed)
\n输出新的一行
\r亦即 Enter 按键
\t水平的 [tab] 按键
\v垂直的 [tab] 按键
\xNNNN 为两位数的数字,可以转换数字成为字符。
关于 C 程序语言内,常见的变数格式
%ns那个 n 是数字, s 代表 string ,亦即多少个字符;
%ni那个 n 是数字, i 代表 integer ,亦即多少整数字数;
%N.nf那个 n 与 N 都是数字, f 代表 floating (浮点),如果有小数字数,
假设我共要十个位数,但小数点有两位,即为 %10.2f 啰!
printf示例
printf '%s\t %s\t %s\t %s\t %s\t \n' $(cat printf.txt)这里的写法其实很类似C语言printf中的占位符,由于printf不是管道命令,因此需要将文件内容事先提取出来给printf作为输入才行
awk命令
awk '条件类型 1{动作 1} 条件类型 2{动作 2} ...' filenameawk命令将文件的每一行以空格或者tab分割成表格形状,在awk的括号内,每一行的每一个字段都有变量名,$1、$2……分别代表第一列、第二列等等,$0代表所有列(一整行)last | awk '{print $1 "\t" $3}'将last输出的内容的第一列和第三列展示出来,显示时列与列之间使用tab作为分隔符- awk中的内置变量
NF每一行($0)拥有的字段总数NR目前awk所处理的是“第几行”的数据FS目前的分隔字符是什么(默认为空格)
last | awk '{print $1 "\t lines:" NR "\t columns: " NF}'将会分别显示出当前所处理到的行号和当前行的字段数,内置变量在使用时需要大写,不需要双引号或者$等前缀,直接使用即可cat /etc/passwd | awk '{FS=":"} $3<10 {print $1 "\t" $3}'使用冒号作为分隔符,取出第三列小于10的那些数据,并且打印第一列和第三列,中间使用tab隔开(此时{FS=":"}是在第二行生效的)cat /etc/passwd | awk 'BEGIN {FS=":"} $3<10 {print $1 "\t" $3}'使用冒号作为分隔符,取出第三列小于10的那些数据,并且打印第一列和第三列,中间使用tab隔开,使用BEGIN之后,按冒号分割从第一行就开始生效了哦awk做统计的例子……待补充
diff和patch命令
diff命令用于对比两个文件之间的差异,以行为单位比较-b忽略一行中,仅有多个空白行的差异,例如about me与about me-B忽略空白行的差异-i忽略大小写的不同diff passwd.old passwd.new列出不同的那行patch与diff命令密不可分,通常用于将旧文件升级为新文件diff -Naur passwd.old passwd.new > passwd.patch这个命令会产生一个从旧文件到新文件的补丁,补丁中的内容如果是---开头,则为旧文件信息,如果是+++开头,则为新文件信息,跟git的显示方式相同patch -p0 < passwd.path更新补丁(减去0层目录,也就是新旧数据在同一层目录下)patch -R -p0 < passwd.path还原更新
cmp命令
cmp用于比较两个文件,以字节为单位,也可以比较binary filecmp file1 file2列出第一个发现的不同点cmp -l file1 file2将所有不同点的字节处都列出来
本文深入讲解Linux中常用命令如grep、sed、awk的高级用法,包括正则表达式匹配、文本处理技巧及diff、patch的文件对比与更新。通过实例演示如何高效管理Linux系统。
1万+

被折叠的 条评论
为什么被折叠?



