参考链接: http://c.biancheng.net/view/1120.html
从 截去 的角度上说,总结为: 左#右%
从 截取 的角度上说,反过来。
其中,string 表示要截取的字符,chars 是指定的字符(或者子字符串), * 是通配符的一种,表示任意长度的字符串。
*chars 连起来使用的意思是:忽略左边的所有字符,直到遇见 chars(chars 不会被截取)。
如果希望直到最后一个指定字符(子字符串)再匹配结束,那么可以使用##,具体格式为:
2.使用 % 截取左边字符
使用%号可以截取指定字符(或者子字符串)左边的所有字符,具体格式如下:
请注意 * 的位置,因为要截取 chars 左边的字符,而忽略 chars 右边的字符,所以*应该位于 chars 的右侧。其他方面%和#的用法相同,这里不再赘述,仅举例说明:
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
}
sqlldr | sed -n '/CQCS_OPT.I_P_GU_PLED_INFO:$/{h:an/^$/!{Hba}gp}'这样实现跟行数无关。
要将结果导入到另一个文件里,用输出重定向,命令后面加 >>output
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)