
参考链接: http://c.biancheng.net/view/1120.html
从 截去 的角度上说,总结为: 左#右%
从 截取 的角度上说,反过来。
其中,string 表示要截取的字符,chars 是指定的字符(或者子字符串), * 是通配符的一种,表示任意长度的字符串。
*chars 连起来使用的意思是:忽略左边的所有字符,直到遇见 chars(chars 不会被截取)。
如果希望直到最后一个指定字符(子字符串)再匹配结束,那么可以使用##,具体格式为:
2.使用 % 截取左边字符
使用%号可以截取指定字符(或者子字符串)左边的所有字符,具体格式如下:
请注意 * 的位置,因为要截取 chars 左边的字符,而忽略 chars 右边的字符,所以*应该位于 chars 的右侧。其他方面%和#的用法相同,这里不再赘述,仅举例说明:
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C 语言string的用法有哪些呢,请看看下面我为你整理 总结 的c语言string的用法大全_C语言中string使用 方法 。
c语言string的用法
函数原型:char *strdup(const char *s)
函数功能:字符串拷贝,目的空间由该函数分配
函数返回:指向拷贝后的字符串指针
参数说明:src-待拷贝的源字符串
所属文件:<string.h>
[cpp] view plain
#include<stdio.h>
#include<string.h>
#include<alloc.h>
intmain()
{
char*dup_str,*string="abcde"
dup_str=strdup(string)
printf("%s",dup_str)
free(dup_str)
return0
}
@函数名称:strcpy
函数原型:char* strcpy(char* str1,char* str2)
函数功能:把str2指向的字符串拷贝到str1中去
函数返回:返回str1,即指向str1的指针
参数说明:
所属文件:<string.h>
[cpp] view plain
#include<stdio.h>
#include<string.h>
intmain()
{
charstring[10]
char*str1="abcdefghi"
strcpy(string,str1)
printf("thestringis:%s\n",string)
return0
}
@函数名称:strncpy
函数原型:char *strncpy(char *dest, const char *src,intcount)
函数功能:将字符串src中的count个字符拷贝到字符串dest中去
函数返回:指向dest的指针
参数说明:dest-目的字符串,src-源字符串,count-拷贝的字符个数
所属文件:<string.h>
[cpp] view plain
#include<stdio.h>
#include<string.h>
intmain()
{
char*src="bbbbbbbbbbbbbbbbbbbb"//20'b's
chardest[50]="aaaaaaaaaaaaaaaaaaaa"//20'a's
puts(dest)
strncpy(dest,src,10)
puts(dest)
return0
}
输出:
[cpp] view plain
/*******************************************
aaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbaaaaaaaaaa
*******************************************/
注意:strncpy只复制指定长度的字符,不会自动在末尾加'\0'。若指定长度超过源字符串长度,不够的部分补‘\0’,
@函数名称:strcat
函数原型:char* strcat(char * str1,char * str2)
函数功能:把字符串str2接到str1后面,str1最后的'\0'被取消
函数返回:str1
参数说明:
所属文件:<string.h>
[cpp] view plain
#include<stdio.h>
#include<string.h>
intmain()
{
charbuffer[80]
strcpy(buffer,"Hello")
strcat(buffer,"world")
printf("%s\n",buffer)
return0
}
@函数名称:strncat
函数原型:char *strncat(char *dest, const char *src, size_t maxlen)
函数功能:将字符串src中前maxlen个字符连接到dest中
函数返回:
参数说明:
所属文件:<string.h>
[cpp] view plain
#include<stdio.h>
#include<string.h>
charbuffer[80]
intmain()
{
strcpy(buffer,"Hello")
strncat(buffer,"world",8)
printf("%s\n",buffer)
strncat(buffer,"*************",4)
printf("%s\n",buffer)
return0
}
注意:与strncpy不同的是,strncat会自动在末尾加‘\0’,若指定长度超过源字符串长度,则只复制源字符串长度即停止
@函数名称:strcmp
函数原型:int strcmp(char * str1,char * str2)
函数功能:比较两个字符串str1,str2.
函数返回:str1<str2,返回负数str1=str2,返回 0str1>str2,返回正数.
参数说明:
所属文件:<string.h>
[cpp] view plain
#include<string.h>
#include<stdio.h>
intmain()
{
char*buf1="aaa",*buf2="bbb",*buf3="ccc"
intptr
ptr=strcmp(buf2,buf1)
if(ptr>0)
printf("buffer2isgreaterthanbuffer1\n")
else
printf("buffer2islessthanbuffer1\n")
ptr=strcmp(buf2,buf3)
if(ptr>0)
printf("buffer2isgreaterthanbuffer3\n")
else
printf("buffer2islessthanbuffer3\n")
return0
}
@函数名称:strncmp
函数原型:int strncmp(char *str1,char *str2,int count)
函数功能:对str1和str2中的前count个字符按字典顺序比较
函数返回:小于0:str1<str2,等于0:str1=str2,大于0:str1>str2
参数说明:str1,str2-待比较的字符串,count-比较的长度
所属文件:<string.h>
[cpp] view plain
#include<string.h>
#include<stdio.h>
intmain()
{
charstr1[]="aabbc"//
charstr2[]="abbcd"//
//为使测试程序更简练,此处假定了strncmp只返回-1,0,1三个数
charres_info[]={'<','=','>'}
intres
//前1个字符比较
res=strncmp(str1,str2,1)
printf("1:str1%cstr2\n",res_info[res+1])
//前3个字符比较
res=strncmp(str1,str2,3)
printf("3:str1%cstr2\n",res_info[res+1])
}
输出:
[cpp] view plain
/****************************************
1:str1=str2
3:str1<str2
*****************************************/
@函数名称:strpbrk
函数原型:char *strpbrk(const char *s1, const char *s2)
函数功能:得到s1中第一个“同时也出现在s2中”字符的位置指针
函数返回:位置指针
参数说明:
所属文件:<string.h>
[cpp] view plain
#include<stdio.h>
#include<string.h>
intmain()
{
char*p="Findallvowels"
p=strpbrk(p+1,"aeiouAEIOU")
while(p)
{
printf("%s\n",p)
p=strpbrk(p+1,"aeiouAEIOU")
}
return0
}
输出:
[cpp] view plain
/**************************************
indallvowels
allvowels
owels
els
**************************************/
@函数名称:strcspn
函数原型:int strcspn(const char *s1, const char *s2)
函数功能:统计s1中从头开始直到第一个“来自s2中的字符”出现的长度
函数返回:长度
参数说明:
所属文件:<string.h>
[cpp] view plain
#include<stdio.h>
#include<string.h>
intmain()
{
printf("%d\n",strcspn("abcbcadef","cba"))
printf("%d\n",strcspn("xxxbcadef","cba"))
printf("%d\n",strcspn("123456789","cba"))
return0
}
输出:
[cpp] view plain
/************************
0
3
9
************************/
@函数名称:strspn
函数原型:int strspn(const char *s1, const char *s2)
函数功能:统计s1中从头开始直到第一个“不来自s2中的字符”出现的长度
函数返回:位置指针
参数说明:
所属文件:<string.h>
[html] view plain
#include<stdio.h>
#include<string.h>
#include<alloc.h>
intmain()
{
printf("%d\n",strspn("abcbcadef","cba"))
printf("%d\n",strspn("xxxbcadef","cba"))
printf("%d\n",strspn("123456789","cba"))
return0
}
输出:
[cpp] view plain
/************************
6
0
0
************************/
@函数名称:strchr
函数原型:char* strchr(char* str,char ch)
函数功能:找出str指向的字符串中第一次出现字符ch的位置
函数返回:返回指向该位置的指针,如找不到,则返回空指针
参数说明:str-待搜索的字符串,ch-查找的字符
所属文件:<string.h>
[cpp] view plain
#include<string.h>
#include<stdio.h>
intmain()
{
char*str="Thisisastring!"
charch
char*p
while(1)
{
printf("Pleaseinputachar:")
ch=getchar()
p=strchr(str,ch)
if(p)
printf("%cisthe%dcharacterof\"%s\"\n",ch,(int)(p-str+1),str)
else
printf("Notfound!\n")
printf("PressESCtoquit!\n\n")
if(27==getch())
break
fflush(stdin)
}
return0
}
运行结果:
[cpp] view plain
/********************************************
Pleaseinputachar:i
iisthe3characterof"Thisisastring!"
PressESCtoquit!
Pleaseinputachar:l
Notfound!
PressESCtoquit!
Pleaseinputachar:s
sisthe4characterof"Thisisastring!"
PressESCtoquit!
**********************************************/
@函数名称:strrchr
函数原型:char *strrchr(const char *s, int c)
函数功能:得到字符串s中最后一个含有c字符的位置指针
函数返回:位置指针
参数说明:
所属文件:<string.h>
[cpp] view plain
#include<string.h>
#include<stdio.h>
intmain()
{
charstring[15]
char*ptr,c='r'
strcpy(string,"Thisisastring")
ptr=strrchr(string,c)
if(ptr)
printf("Thecharacter%cisatposition:%d",c,ptr-string)
else
printf("Thecharacterwasnotfound")
return0
}
@函数名称:strstr
函数原型:char* strstr(char* str1,char* str2)
函数功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)
函数返回:返回该位置的指针,如找不到,返回空指针
参数说明:
所属文件:<string.h>
[cpp] view plain
#include<stdio.h>
#include<string.h>
intmain()
{
char*str1="OpenWatcomC/C++",*str2="Watcom",*ptr
ptr=strstr(str1,str2)
printf("Thesubstringis:%s\n",ptr)
return0
}
输出:
The substringis:Watcom C/C++
@函数名称:strrev
函数原型:char *strrev(char *s)
函数功能:将字符串中的所有字符颠倒次序排列
函数返回:指向s的指针
参数说明:
所属文件:<string.h>
[cpp] view plain
#include<string.h>
#include<stdio.h>
intmain()
{
charforward[]="string"//原文中定义为char*是不对的,指向代码段的指针内容是不可变的
printf("Beforestrrev():%s",forward)
strrev(forward)
printf("Afterstrrev():%s",forward)
return0
}
输出:
[cpp] view plain
/************************************
Beforestrrev():string
Afterstrrev():gnirts
************************************/
@函数名称:strnset
函数原型:char *strnset(char *s, int ch, size_t n)
函数功能:将字符串s中前n个字符设置为ch的值
函数返回:指向s的指针
参数说明:
所属文件:<string.h>
[cpp] view plain
#include<stdio.h>
#include<string.h>
intmain()
{
charstring[]="aaaaaaaaaaaaaaaaaaaaaaa"
charletter='x'
printf("stringbeforestrnset:%s\n",string)
strnset(string,letter,10)
printf("stringafterstrnset:%s\n",string)
return0
}
输出:
[cpp] view plain
/*************************************************
stringbeforestrnset:aaaaaaaaaaaaaaaaaaaaaaa
stringafterstrnset:xxxxxxxxxxaaaaaaaaaaaaa
*************************************************/
@函数名称:strset
函数原型:char *strset(char *s, int ch)
函数功能:将字符串s中所有字符设置为ch的值
函数返回:指向s的指针
参数说明:
所属文件:<string.h>
[cpp] view plain
#include<stdio.h>
#include<string.h>
intmain()
{
charstring[10]="123456789"
charsymbol='c'
printf("Beforestrset():%s",string)
strset(string,symbol)
printf("Afterstrset():%s",string)
return0
}
@函数名称:strtok
函数原型:char *strtok(char *s1, const char *s2)
函数功能:分解s1字符串为用特定分隔符分隔的多个字符串(一般用于将英文句分解为单词)
函数返回:字符串s1中首次出现s2中的字符前的子字符串指针
参数说明:s2一般设置为s1中的分隔字符
规定进行子调用时(即分割s1的第二、三及后续子串)第一参数必须是NULL
在每一次匹配成功后,将s1中分割出的子串位置替换为NULL(摘下链中第一个环),因此s1被破坏了
函数会记忆指针位置以供下一次调用
所属文件:<string.h>
[cpp] view plain
#include<string.h>
#include<stdio.h>
intmain()
{
char*p
char*buffer
char*delims={".,"}
buffer=strdup("Findwords,allofthem.")
printf("%s\n",buffer)
p=strtok(buffer,delims)
while(p!=NULL){
printf("word:%s\n",p)
p=strtok(NULL,delims)
}
printf("%s\n",buffer)
return0
}//根据测试,可以随时给strtok的第一个参数输入一个新的字符串,开始新字符串的分隔
PS:根据测试,可以随时给strtok的第一个参数输入一个新的字符串,开始新字符串的分隔
@函数名称:strupr
函数原型:char *strupr(char *s)
函数功能:将字符串s中的字符变为大写
函数返回:
参数说明:
所属文件:<string.h>
[cpp] view plain
#include<stdio.h>
#include<string.h>
intmain()
{
charstring[]="abcdefghijklmnopqrstuvwxyz",*ptr//会影响原字符串的内存,用char[]来声明
ptr=strupr(string)
printf("%s",ptr)
return0
}
@函数名称:strlwr
函数原型:char *strlwr(char *s)
函数功能:将字符串中的字符变为小写字符
函数返回:指向s的指针
参数说明:
所属文件:<string.h>
[cpp] view plain
#include<string.h>
intmain()
{
charstr[]="HOWTOSAY"
printf("%s",strlwr(str))
return0
}
@函数名称:strerror
函数原型:char *strerror(int errnum)
函数功能:得到错误信息的内容信息
函数返回:错误提示信息字符串指针
参数说明:errnum-错误编号
所属文件:<string.h>
[cpp] view plain
#include<stdio.h>
#include<errno.h>
intmain()
{
char*buffer
buffer=strerror(errno)
printf("Error:%s",buffer)
return0
}
@函数名称:memcpy
函数原型:void *memcpy(void *dest, const void *src, size_t n)
函数功能:字符串拷贝
函数返回:指向dest的指针
参数说明:src-源字符串,n-拷贝的最大长度
所属文件:<string.h>,<mem.h>
[cpp] view plain
#include<stdio.h>
#include<string.h>
intmain()
{
charsrc[]="******************************"
chardest[]="abcdefghijlkmnopqrstuvwxyz0123456709"
char*ptr
printf("destinationbeforememcpy:%s\n",dest)
ptr=memcpy(dest,src,strlen(src))
if(ptr)
printf("destinationaftermemcpy:%s\n",dest)
else
printf("memcpyfailed")
return0
}
输出:
[cpp] view plain
/*************************************************************
destinationbeforememcpy:abcdefghijlkmnopqrstuvwxyz0123456709
destinationaftermemcpy:******************************456709
**************************************************************/
@函数名称:memccpy
函数原型:void *memccpy(void *dest, const void *src, int c, size_t n)
函数功能:字符串拷贝,到指定长度或遇到指定字符时停止拷贝
函数返回:
参数说明:src-源字符串指针,c-中止拷贝检查字符,n-长度,dest-拷贝底目的字符串指针
所属文件:<string.h>,<mem.h>
[cpp] view plain
#include<string.h>
#include<stdio.h>
intmain()
{
char*src="Thisisthesourcestring"
chardest[50]
char*ptr
ptr=memccpy(dest,src,'c',strlen(src))
if(ptr)
{
*ptr='\0'
printf("Thecharacterwasfound:%s",dest)
}
else
printf("Thecharacterwasn'tfound")
return0
}
输出:
[cpp] view plain
/*****************************************
Thecharacterwasfound:Thisisthesourc
*****************************************/
PS:指定字符被复制到dest中,memccpy返回了dest中指定字符的下一处的地址,返回NULL表示未遇到指定字符
@函数名称:memchr
函数原型:void *memchr(const void *s, int c, size_t n)
函数功能:在字符串中第开始n个字符中寻找某个字符c的位置
函数返回:返回c的位置指针,返回NULL时表示未找到
参数说明:s-要搜索的字符串,c-要寻找的字符,n-指定长度
所属文件:<string.h>,<mem.h>
[cpp] view plain
#include<string.h>
#include<stdio.h>
intmain()
{
charstr[17]
char*ptr
strcpy(str,"Thisisastring")
ptr=memchr(str,'r',strlen(str))
if(ptr)
printf("Thecharacter'r'isatposition:%d",ptr-str)
else
printf("Thecharacterwasnotfound")
return0
}
@函数名称:memcmp
函数原型:int memcmp(const void *s1, const void *s2,size_t n)
函数功能:按字典顺序比较两个串s1和s2的前n个字节
函数返回:<0,=0,>0分别表示s1<,=,>s2
参数说明:s1,s2-要比较的字符串,n-比较的长度
所属文件:<string.h>,<mem.h>
[cpp] view plain
#include<stdio.h>
#include<string.h>
intmain()
{
char*buf1="ABCDE123"
char*buf2="abcde456"
intstat
stat=memcmp(buf1,buf2,5)
printf("Thestringstoposition5are")
if(stat)printf("not")
printf("thesame\n")
return0
}
@函数名称:memicmp
函数原型:int memicmp(const void *s1, const void *s2, size_t n)
函数功能:按字典顺序、不考虑字母大小写对字符串s1,s2前n个字符比较
函数返回:<0,=0,>0分别表示s1<,=,>s2
参数说明:s1,s2-要比较的字符串,n-比较的长度
所属文件:<string.h>,<mem.h>
[cpp] view plain
#include<stdio.h>
#include<string.h>
intmain()
{
char*buf1="ABCDE123"
char*buf2="abcde456"
intstat
stat=memicmp(buf1,buf2,5)
printf("Thestringstoposition5are")
if(stat)printf("not")
printf("thesame")
return0
}
输出:
[cpp] view plain
/**************************************
Thestringstoposition5arethesame
***************************************/
@函数名称:memmove
函数原型:void *memmove(void *dest, const void *src, size_t n)
函数功能:字符串拷贝
函数返回:指向dest的指针
参数说明:src-源字符串,n-拷贝的最大长度
所属文件:<string.h>,<mem.h>
[cpp] view plain
#include<string.h>
#include<stdio.h>
intmain()
{
chardest[40]="abcdefghijklmnopqrstuvwxyz0123456789"
printf("destinationpriortomemmove:%s\n",dest)
memmove(dest+1,dest,35)
printf("destinationaftermemmove:%s",dest)
return0
}
PS:与memcpy不同的是,memmove可以处理目的字符串与源字符串地址空间出现重叠的情况,可保证待复制的内容不被破坏。
@函数名称: memset
函数原型: void *memset(void *s, int c, size_t n)
函数功能: 字符串中的n个字节内容设置为c
函数返回:
参数说明: s-要设置的字符串,c-设置的内容,n-长度
所属文件: <string.h>,<mem.h>
[cpp] view plain
#include<string.h>
#include<stdio.h>
#include<mem.h>
intmain()
{
charbuffer[]="Helloworld"
printf("Bufferbeforememset:%s/n",buffer)
memset(buffer,'*',strlen(buffer)-1)
printf("Bufferaftermemset:%s",buffer)
return0
}
c语言string的用法大全相关 文章 :
★ c语言string的用法
★ c语言的用法
★ Linux C语言字符与字符串处理
★ c语言中strcmp的用法
★ c语言大括号的用法
★ c语言位运算符的用法
★ c语言char的用法
★ c语言中sort的用法详解
★ c语言中int的用法
★ c语言map的用法
Linux命令分为内部命令(shell自带的命令)和外部命令(不是shell自带的命令,由用户安装),怎么鉴别是内部命令和外部命令呢?可以通过type命令来鉴别什么是shell呢?shell是一个程序,常用的有bash shell,平时我们通过用户名和密码登录到linux,其实就是登录到bash shell程序,通过bash shell来 *** 作linux内核
命令执行流程
那岂不是说使用外部命令效率会很慢吗?
其实一点都不慢,它会去PATH环境变量设置的一堆目录中查找
cd is a shell builtin 表示内部命令
ifconfig is hashed (/usr/sbin/ifconfig) 表示外部命令
cd命令切换文件夹
现在我们cd /usr/sbin
通过cat命令查看文件内容
通过cat ifconfig来查看ifconfig,发现是乱码文件
file命令查看文件类型
输入file ifconfig
从输出信息可以看出它是一个二进制可执行文件
whereis命令查看文件位置
find / -name jdk
echo命令用户打印信息,相当于java中的system.out.println
可以使用回车查看下一行、空格查看下一页、q退出
一般使用man查看外部命令,help查看内部命令
查看linux下的应用和应用的进程号
当我们在这个窗口中输入kill -9 1593的话,另外一个正在编辑文件的进程就会退出
在前面我们已经讲过,bash shell程序在执行命令的一个过程及原理,对于外部命令,它会去PATH这个环境变量中查找执行命令所在的路径,当然在去PATH中寻找之前会先去hash表中查找这个命令有没有执行过,执行过的话会记录在hash表中,则此次查找只需从hash表中就可以很方便的找到
查看分区信息 -h 表示文件大小后面会显示文件大小
查看文件的使用情况
使用man ls 查看ls命令的相关介绍
-a:可以查看隐藏文件
-l:以长列表的形式展示文件列表信息
第一位 -:表示文件,d表示文件夹,b表示块设备文件,c表示字符设备文件,p表示命令管道文件,s表示套接字文件, 从第二位开始往后数九位表示属主权限(每三位一组 rwx:读、写、执行),第11位表示的点表示分隔符,点后面的数字表示文件有几个硬连接,第一个root代表属主名,第二个root代表这个第一个root所在的组织,接下来的5表示文件大小,5后面的日期表示文件最后一次修改的时间, 1.txt代表的文件或文件夹的名称
小结:
切换文件目录
cd 文件路径
cd:切换到家目录
cd ~:回到家目录(也就是家目录)
cd ..:回到上一级目录
创建目录
mkdir 目录名
mkdir -p 目录名,级联创建目录
cp 被拷贝的文件(可以是路径加文件名) 拷贝到哪个位置
复制目录使用
cp -r 被拷贝的目录 目标位置
移动命令
mv 被移动的文件 目标位置+目标文件名
rm 文件名(此中方式的删除需要再输入 yes)
rm -f 文件名,无提示直接删除
rm -rf 文件夹
ln命令默认创建的是硬连接
ln profile a:将a硬连接到profile文件上,他们底层共用一个文件,删除他们之中任何一个
对另外一个没有影响,同时你也可以使用 ll -i命令查看文件编号
ln -s profile a:将a软连接到profile文件,当你访问a的时候会去访问profile,profile再访问底层文件,当将profile删除了之后a就无法访问了
一致时间、创建新文本
touch 已存在的文件:会将文件的访问时间、更新时间、改变时间(即上面stat中介绍的三个时间)变成一致
touch 不存在的文件:会创建一个新的文本
cat命令查看文件内容
cat 1.txt:查看单个文件内容
cat 1.txt 2.txt:查看多个文件
more 1.txt:以分页的形式查看文件内容,按空格:下一页,回车:下一行(注意它不能回看,回看的话只能用鼠标回轮)
less 1.txt:使用空格下一页, b看上一页, 回车看下一行
注意less的话会把整个文件内容加载到内存,如果文件比较大的话,建议使用more命令查看
head命令默认查看文件前10行内容, head 1.txt
head -5 1.txt:查看文件前5行的内容
tail命令默认查看文件后10行的内容 tail 1.txt
tail -5 1.txt:查看文件后5行内容
tail -f 1.txt:实时查看文件增量内容
cat b.txt | head -3:管道左边的命令会以输出流的形式交给管道右边的命令,管道右边以输入流的形式接收并且拼到命令的右边
注意:ls -l 不能接受前面的输出流,这个怎么办呢?可以通过xargs命令
vi文本编辑器末行模式的 *** 作
set nu(number的缩写): 设置行号
set nonu(nonumber的缩写):取消行号
set readonly:设置为只读
n:往下查找
N:往上查找
n:往上查找
N:往下查找
一般我们会在/etc/profile文件中设置一些环境变量,但是在设置的时候可能没有记住目录,这时候我们可以使用如下方式
效果
格式 :s/str1/str2/gi
/ : 临近s命令的第一个字符边界字符,也可以是 @或#
g : 一行内全部替换
i : 忽略大小写
范围
n:行号
. :当前光标行
+n :偏移n行
-3
%:全文
全部删除 1,$d
删除前三行
删除倒数第2行
光标挪到最后一行 按下小写的p
效果图
正则表达式是对字符串 *** 作的一种逻辑公式,就是用事先定义好的一些特殊字符、及这些特定字符的组合组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。
\ :转义字符
. :匹配任意单个字符
[1249a] :匹配中括号中任意字符
[^12] :匹配中括号中任意非1和2的字符
[a-k] :匹配中括号中任意a~k中的一个字符
^ :行首
$ :行尾
<abc>:单词首尾边界(匹配单词abc)
| :连接 *** 作符
(,) : 选择 *** 作符
\n :反向引用
? :匹配0到1次
在Linux中通过grep命令使用正则表达式来匹配信息
f :选择显示的列
s :不显示没有分隔符的行
d :自定义分隔符
n :按数值排序
r :倒序
t :自定义分隔符
K :选择排序列
u :合并相同行
f :忽略大小写
sed:行编辑器,以行为单位进行处理,可以将数据进行替换、删除、新增、选取等特定工作
sed [options] 'Command' file ...
-n :静默模式,不再默认显示模式空间(内存)中的内容
-i :直接修改原文件
-e SCRIPT :可以同时执行多个脚本
-f /PATH/TO/SED_SCRIPT
-r :表示使用扩展正则表达式
d :删除符合条件的行
p :显示符号条件的行
a \string :在指定的行后面追加新行,内容为string
\n :可以用于换行
i \string :在指定的行前面添加新行,内容为string
c :取代,c的后面可以接字符串
s /pattern/string/修饰符:查找并替换。默认只替换每行中第一次被模式匹配到的字符串
g :行内全局替换
i :忽略字符大小写
s///:s###,s@@@
(),\1,\2
sed "2p" ctxt
但是在执行下面的 *** 作的时候文本中的内容都显示出来了,它的原理是,打印匹配的行,以及文本中所有的内容
注意:它删的是内存中的数据,而不是目标文件
sed -i "3d" ctxt
它的原理是先把内存中的第3行数据删除,然后再把内存中的数据写回原文件,这时原文件中的第三行就没有了
使用变量的形式
awk是一个强大的文本分析工具。
相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。
简单来说awk就是把文件逐行的读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk -F '{pattern + action}' {filenames}
支持自定义分隔符,默认是以空格分隔的
支持正则表达式匹配
支持自定义变量,数组 a[1] a[tom] map(key)
支持内置变量
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
支持函数
print、split、substr、sub、gsub
支持流程控制语句
if、while、do/while、for、break、continue
练习题
passwd文件内容解读:
passwd文件中每行由7个字段组成,字段与字段之间由:分隔,第一个字段代表用户名,第二个字段表示用户对应的加密后的密码,第三个字段表示userId,第四个字段表示groupId,第五个字段表示对用户的描述,第六个字段表示用户的家目录,第七个字段表示的是这个用户默认使用的shell
其中$0表示整行
统计报表:合计每人1月工资, 0:manager,1:worker
将awk后面的内容封装到一个文件中(封装的脚本要遵循一定的格式)
qqq文件的内容格式
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)