-
sed '4c cang bujige' student.txt //行替换
sed '2,4s/F/M/g' student.txt //指定范围内的行进行字符串替换
sed -3 's/furong/xx/g;s/fengji/yy/g' student.txt //-e选项,进行多条sed动作操作,动作之间用";"分隔
sed '2d' test.txt #删除第二行
sed '2,4d' test.txt #删除第二到第四行
sed '2a input content' test.txt #在第二行后追加input content
sed '2i input content' test.txt #在第二行前插入input content
sed '2c input content' test.txt #将第二行替换为input content(替换一整行)
各个动作都可以加上行号范围
/g是指在指定范围内有多个旧字符串,就替换掉所有的,如果没有/g,就只替换第一个旧字符串
多个动作之间可用“;”隔开
查看全部 -
【字符替换命令sed】
sed是一种几乎包括在所有的UNIX平台(包括Linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。
sed 选项 '动作' 文件名
#''不能省略
选项
-n #一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕
-e #允许对输入数据应用多条sed命令编辑(多个动作)
-i #用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
动作
a #追加,在当前行后添加一行或多行
c #行替换,用c后面的字符串替换原数据行
i #插入,在当前行之前插入一行或多行
d #删除,删除指定的行
p #打印,输出指定的行
s #字符串替换,用一个字符串替换另外一个字符串。格式为"行范围s/旧字符串/新字符串/g"(和vim中的替换格式类似)
查看全部 -
FS内置变量
查看全部 -
在awk中,一般默认是制表符或者空格作为分隔符,假如说我们想要使用其他的符号作为分隔符,我们可以
awk " {FS=":"}{printf $1 "\t" $3 "\n"}'这样:就变成了分隔符,{FS=":"}意思是这个:分隔符的别名起名为FS。
当我们使用自己定义的分隔符时,一般都在条件前面加上BEGIN,否则第一行读取的数据会识别不了自己定义的分隔符,因此我们应该这样做awk "BEGIN {FS=":"}{printf $1 "\t" $3 "\n"}'
查看全部 -
awk 'BEGIN{动作0}条件1{动作1}条件2{动作2}' 表示在所有动作之前先执行动作0,相应的还有END,表示在所有动作执行之后执行动作0。
FS内置变量,用来指定分隔符;
BEGIN可以在执行打印工作之前,首先指明分隔符,以打印出正确结果,例如:cat /etc/passwd|grep "/bin/bash"|awk 'BEGIN{FS=":"}{print $1 "\t" $3}'
查看全部 -
awk命令:
awk是一个数据处理工具,相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分成数个”字段“来处理。
通常运行模式: awk ' 条件类型1{动作1} 条件类型2{动作2}...‘ 文件名
例:awk '{printf $2 "\t" $4 "\n"}' filename awk '{print $2 "\t" $4}' filename
printf后面要接换行符"\n" print 不需要
awk命令的格式
1.awk '条件1{动作1}条件2{动作2}……’ 文件 其中转义符\n等需要用双引号括起来才可以生效
2.在printf中$1 代表打印第一个字段。也就是说字段是以空格为分割的。
3.其中把文件的文件名赋予了$0变量
4.print命令可以比printf命令在一行的末尾自动加入换行符
查看全部 -
print命令和printf命令
查看全部 -
printf命令用法
查看全部 -
printf输出格式说明
查看全部 -
printf格式化输出
printf命令 --> 格式化输出命令
printf "输出类型输出格式" 输出内容
输出类型:
%ns:输出字符串。n是数字,指代输出几个字符
%ni:输出整数。n是数字,指代输出几个数字
%m.nf:输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%8.2f代表共输出8位数,其中2是小数位数,6位是整数
输出格式:
\a:输出警告声音
\b:输出退格键,也就是Backspace键
\f:清空屏幕 \n:换行
\r:回车,也就是Enter键
\t:水平输出退格键,也就是Tab键
\v:垂直输出退格键,也就是Tab键
printf '%s\t%s\t%s\n' 1 2 3 4 5 6 --> 此时才会正确输出:
1 2 3
4 5 6
使用printf输出命令,必须明确指出所有的格式
如果想要使用printf读取文件中的内容就需要:
printf '%s' $(cat student.txt) 不调整输出格式
printf '%s\t%s\t%s\t%s\n' $(cat student.txt) 调整输出格式
awk命令的输出中支持print和printf命令
print在输出之后会在自动加入换行符,但Linux系统中默认没有print命令
printf是标准格式输出命令,并不会自动加入换行符,如需换行,需要手动加入换行符
查看全部 -
cut [选项] 文件名
-f 列号:提取第几列(从1开始)
cut -f 列号,列号 (多个列号用逗号隔开;这个方法默认的文件以TAB制表符)
cut -f 列号,列号 -d "指定的分隔符" (比如图中,以:为分隔符;列出第1,和第3列的内容)
查看全部 -
grep行提取,cut列提取;
cut [选项] 文件名
-f 列号:提取第几列(从1开始)
cut -f 列号,列号 (多个列号用逗号隔开;这个方法默认的文件以TAB制表符)
cut -f 列号,列号 -d "指定的分隔符" (比如图中,以:为分隔符;列出第1,和第3列的内容)
-d 分隔符:按照指定分隔符分割列 默认为tab制表符
grep "bin/bash" /etc/passwdgrep -v "root"cut -f 1 -d ":" 提取非root登录用户用户名;
查看全部 -
正则实例
正则表达式适合在文档中提取,不适合做写入的判断依据
匹配日期:"[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}"
匹配IP地址:"^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"
还可以匹配电话号码、邮件地、URL地址信息等
匹配时间格式:grep "[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}" test.txt
匹配IP地址: grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" test.txt
IP地址最大为255.255.255.255,所以这个正则只能用于从文档中提取IP地址,不能用来写入 vi清空所有行的快捷键:先d后G
查看全部 -
正则表达式规则
查看全部 -
1、转义符“\”:让特殊的符号丧失它的作用,只是表示这个符号本身
"\.$" #匹配以.结尾的行
2、“\{n\}”:表示其前面的字符恰好出现n次
"a\{3\}" #匹配a字母连续出现三次的字符串
"[0-9]\{3\}" #匹配包含连续的三个数字的字符串,最好加上定界符,即左右加上匹配的字母,如"a[0-9]\{3,\}b",否则易匹配错误,因为正则是包含匹配
3、“\{n,\}”表示其前面的字符出现不小于n次
"^[0-9]\{3,\}[a-z]" #匹配最少用连续三个数字开头包含小写字母的行
4、“\{n,m\}”匹配其前面的字符出现n-m次的行
"sa\{1,3\}i" #匹配以s开头、i结尾,且s和i之间有1-3个a的行
查看全部
举报