
有很多方法可以在shell中拦截字符串,我将对其进行总结和总结.
0x01,grep
在文件中搜索与字符串匹配的行并输出
Linux中的grep命令是功能强大的文本搜索工具. 它可以使用正则表达式搜索文本并打印匹配的行. grep的全名是Global Regular Expression Print,表示全局正则表达式版本,其使用权是所有用户.
grep [选项] [指定的字符串] [文件]
-i不区分大小写
-v排除指定的字符串
-c: 仅输出匹配行数.
-n: 显示匹配的行和行号.
-s: 不显示不存在或没有匹配文本的错误消息.
grep支持正则表达式. 以下总结了正则表达式和通配符.
正则表达式
正则表达式用于匹配与文件中的条件匹配的字符串. 正则表达式包含匹配项. grep,awk和sed等命令可以支持正则表达式.
通配符
通配符用于匹配符合条件的文件名. 通配符是完全匹配. 命令ls,findshell截取字符串 awk,cp不支持正则表达式,因此只能使用shell通配符进行匹配.
通常一些符号和通配符很常见,但是含义完全不同
基本正则表达式
上一个字符匹配0或任意次数
匹配除换行符之外的任何字符
匹配行的开头. 例如,^ hello将匹配以hello开头的行
匹配行尾,例如hello将匹配以hello结尾的行
匹配括号中的任何字符,并且仅匹配一个字符.
匹配除方括号字符之外的任何字符. 例如,[^ 0-9]匹配任何非数字字符

转义字符. 用于取消特殊符号的含义
n是一个非负数,与前一个字符精确匹配n次. 例如,o {2}与食物中的两个o匹配
表明它前面的字符出现不少于n次
至少匹配n次,最多匹配m次
需要注意的是,通配符的*表示任意字符,而正则表达式的*是匹配钱一个字符0次或者任意多次 grep "s*" anaconda-ks.cfg 显示的不是包含有s的行,而是显示了整个文件,“s*”匹配s的0次或多次

grep "size*" anaconda-ks.cfg匹配了e的0次或多次,但至少需匹配siz字符串

“.”匹配除了换行符外任意一个字符,和通配符的?相同,“.*”就才和通配符中的“*”作用相同
grep提取行,cut和awk提取列
0x02,剪切
cut是一个选择命令,用于分析一条数据并取出我们想要的内容. 通常,信息选择通常是针对“行”而不是整个信息分析进行分析
剪切[options]文件名
-f列号以提取前几列
-d分隔符根据指定的分隔符拆分列(默认情况下使用tab键)

和grep结合使用,cat /etc/passwd | grep /bin/bash | grep -v root | cut -d":" -f 1

剪切命令的限制行
cut命令不能很好地分隔空格字符. 您可以使用awk命令来解决
0x03,awk
它具有与cut命令相同的效果. 它拦截符合条件的列. grep截取满足条件的行,但是cut有一些限制. 锥子还可以被制表符,冒号和其他定界符拦截. 该功能比cut功能要强大得多,但是awk是一个非常复杂的命令,它不仅可以实现字符串的拦截,还可以在awk命令中进行编程和调用. 最常见的是功能和判断. 因此,awk一直是awk编程. 但是,如果仅是对列的简单拦截,并且没有用空格分隔,则cut命令会更简单.
awk是功能强大的文本分析工具. 与grep搜索和sed编辑相比,awk在分析数据和生成报告时特别强大. 简而言之,awk逐行读取文件,将每一行切成空格作为默认分隔符,然后对剪切的部分执行各种分析处理.

awk’条件1 {动作1}条件2 {动作2} ...’文件名
条件
关系表达式通常用作条件
x> 10确定变量x是否大于10
x> = 10大于或等于
x <= 10小于或等于
动作
格式化输出
流控制语句

$ 1代表第一列,$ 2代表第二列,$ 0代表整行
FS内置变量
awk '{FS=":"}{print $1"\t" $3}' /etc/passwd,使用FS=””,指定分割符,第一行已经读完,用冒号分割已经来不及了,默认的用空格分割,后面的用冒号分割,在
FS之前强制加个BEGIN

关系运算符
cat /etc/passwd | awk '{FS=":"} $3>=500 {printf $1"\n"}'

0x04,printf
printf是awk中的标准输出格式
printf“输出类型输出格式”输出内容
输出类型:
%ns: 输出字符串,n是一个数字,表示输出几个字符
%ni: 输出是整数,n是一个数字,表示输出多个数字

%m.nf: 输出浮点数. m和n是数字,是指输出的整数和小数位数. 添加8.2f%表示总共输出8位数字shell截取字符串 awk,其中2位数字是小数,6位数字是整数.
输出格式:
\ a: 输出警告声音
\ b: 输出退格字符,即退格键
\ f: 清除屏幕
\ n: 换行符
\ r: Enter,这是Enter键
\ t: 水平输出退格键,即Tab键
\ v: 垂直输出退格键,即Tab键

在awk命令的输出中支持print和printf命令
打印: 打印将在每个输出之后自动添加换行符(Linux默认没有打印命令)
printf: printf是标准格式的输出命令,不会自动添加换行符. 如果需要换行符,则必须手动添加.
0x05,sed
sed是几乎所有unix平台(包括linux)上都包含的轻量级流编辑器. sed主要用于选择,替换,删除和添加新数据.
vim也可以选择,删除,替换等,但是vim只能修改文件,而不能直接修改命令的结果,需要将命令保存到文件中,然后再修改文件. 并且sed可以从管道字符接收数据进行修改

sed [option]'[action]'文件名
常用选项
-nGeneral sed命令将所有数据输出到屏幕,添加此参数将仅将sed命令处理的行输出到屏幕
-e允许将多个sed命令应用于输入数据
-i使用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
动作:

a \: 追加,在当前行之后添加一行或多行. 当添加多行(最后一行除外)时,每行的末尾都需要标记“ \”以表示数据不完整.
c \: 该行应使用\”表示数据的结尾.
替换,将原始数据行替换为c之后的字符串. 替换多行(最后一行除外)时,每行的末尾都需要i \: 插入,在当前行之前插入一行或多行,插入多行时,除最后一行外,每行的末尾都必须为标记为“”作为数据的结尾.
d: 删除,删除指定的行.
p: 输出并打印指定的行.
s: 字符串替换,用一个字符串替换另一个字符串. 格式为“行范围s /旧字符串/新字符串/ g”(类似于vim中的替换格式).
sed -n "1p" /etc/passwd ,查看etc/passwd中的第一行,如果不加-n参数,显示这条操作外,还会显示文件的全部内容,加-n 只会显示处理的行

sed "2,36d" /etc/passwd ,删除第二行到第四行的数据,但不修改文件本身,只有加了-i参数才会修改文件本身

添加了动作a和i,在行的末尾添加了a,在行的前面插入了i,但是文件本身不会被修改,只会首先显示修改内容,并且不添加-n除了显示修改过的数据的老虎外,还将显示文本的所有数据.


动作c和动作s用于替换,c用于行替换,s用于字符串替换,并且字符替换格式为sed“ s / old string / new string / g”文件名,在s之前指定行,您只需要更改指定的行,否则就将修改所有行.


0x06,排序命令
对[选项]文件名进行排序
选项
-f忽略大小写
-n按数字类型排序,默认为使用字符串排序
-r反向排序
-t指定定界符,默认使用tab键
-k n [,m]根据指定的字段范围排序,从第n个字段开始,到第m个字段结束,不添加m,默认值为行的结尾

sort -t ":" -k 3,3 /etc/passwd,仔细看,没把uid当作字符串对待,而当数值型对待,需要加-n参数
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-192895-1.html
理财方式这么多
一样的东西实体店卖100