Linux下可以用strstr()函数定位子串所在的位置,用来实现用子串分隔一个字符串。man strstr可以看函数相关介绍
$ man strstrNAME
strstr - locate a substring
SYNOPSIS
#include <string.h>
char *strstr(const char *haystack, const char *needle)
DESCRIPTION
The strstr() function finds the first occurrence of the substring needle in the string haystack. The terminating `\0' characters are not compared.
strstr()函数实现从haystack串中,查找第一次出现的needle子串,只比较有效字符,结束符\0不算在内。
如:
#include <stdio.h>#include <string.h>
int main()
{
char s[]="abc@#123@#def@456@#ghi#789"
char sub[]="@#"
char *pc,*pb
pb=pc=s //pb指向字符串头
while( pc=strstr(pc,sub) ) //查找匹配字符串位置
{
*pc='\0' //置字符串结束符
puts(pb) //输出当前字符串
pc+=strlen(sub) //跳过分隔符串
pb=pc //pb指向新的起始位置
}
if ( pb )
puts(pb)
return 0
}
这个需求不能用grep来实现,本质上是字符串的切割查找提取子串,可用awk来实现,例
如
echo abcdefghelloword | awk -v head="ab" -v tail="fg" '{print substr($0, index($0,head)+length(head),index($0,tail)-index($0,head)-length(head))}'以上关键是计算出开头标记"ab",和结束标记"fg" 在字符串中的位置
执行结果就是
cde
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)