Linux下如何用一个指定的字符串去分割另一个字符串?
例如,现在有一个字符串“abc@#123@#def@456@#ghi#789”,希望以字符串“@#”对其分隔,即分隔后的结果为:abc123def@456ghi#789我...
例如,现在有一个字符串“abc@#123@#def@456@#ghi#789”,希望以字符串“@#”对其分隔,即分隔后的结果为:
abc
123
def@456
ghi#789
我尝试用cut -d"@#" -f[n]的方式去分隔,但cut命令的分隔符只能是1个字符,无法支持字符串。
请问Linux有什么命令可以实现以上功能呢?谢谢! 展开
abc
123
def@456
ghi#789
我尝试用cut -d"@#" -f[n]的方式去分隔,但cut命令的分隔符只能是1个字符,无法支持字符串。
请问Linux有什么命令可以实现以上功能呢?谢谢! 展开
4个回答
展开全部
Linux下可以用strstr()函数定位子串所在的位置,用来实现用子串分隔一个字符串。man strstr可以看函数相关介绍
$ man strstr
NAME
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;
}
展开全部
好多方法,如下提供3种:
#!/bin/sh
mystr="abc@#123@#def@456@#ghi#789"
echo "method 0: pure shell"
str1=$mystr
while [ $str1 != ${str1#*@#} ]
do
echo ${str1%%@#*}
str1=${str1#*@#}
done
echo $str1
echo " "
echo "method 1: awk"
echo $mystr | awk 'gsub("@#","\n")'
echo " "
echo "method 2: sed"
echo $mystr | sed "s/@#/\\n/g"
#!/bin/sh
mystr="abc@#123@#def@456@#ghi#789"
echo "method 0: pure shell"
str1=$mystr
while [ $str1 != ${str1#*@#} ]
do
echo ${str1%%@#*}
str1=${str1#*@#}
done
echo $str1
echo " "
echo "method 1: awk"
echo $mystr | awk 'gsub("@#","\n")'
echo " "
echo "method 2: sed"
echo $mystr | sed "s/@#/\\n/g"
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以使用AWK 和cut,也可以使用C语言来实现,方法很多的额, 当然最好的还是使用shell命令来解决。发私信吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
为什么不适用awk?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询