1. 例子
提取字符串以下字符串 error: 与 : 之间的子字符串。并消除空格。
"src/network/misc/nv_net_udp.c:17:fatalerror:nv_net_tools.h:Nosuchfileordirectory"1
2. 命令
echo"src/network/misc/nv_net_udp.c:17:fatalerror:nv_net_tools.h:Nosuchfileordirectory"|sed-r's/.*error:(.*):.*/1/'|seds/[[:space:]]//g1
该命令涉及 sed 命令的’反向引用’章节, 1 代表 (.*)
3. 结果
nv_net_tools.h1
4. 拓展 : 解决编译错误
leon$makeclean&&makeallarm-hisiv100nptl-linux-gcc-c-fPIC-Wall-g-ggdb-O0-DHI3518_CHIP-DLINUX-I./src/include-I./src/include/common-I./src/include/camera-I./src/include/conf-I./src/include/log-I./src/include/network-I./src/include/upnp-I/home/leon/nvc/arm-hisiv100nptl-linux/includesrc/common/nv_conf.c-obuild/objs/hi3518/src/common/nv_conf.o/*省略中间部分*/arm-hisiv100nptl-linux-gcc-c-fPIC-Wall-g-ggdb-O0-DHI3518_CHIP-DLINUX-I./src/include-I./src/include/common-I./src/include/camera-I./src/include/conf-I./src/include/log-I./src/include/network-I./src/include/upnp-I/home/leon/nvc/arm-hisiv100nptl-linux/includesrc/network/misc/nv_net_udp.c-obuild/objs/hi3518/src/network/misc/nv_net_udp.o
src/network/misc/nv_net_udp.c:17:fatalerror:nv_net_tools.h:Nosuchfileordirectory
compilationterminated.make:***[build/objs/hi3518/src/network/misc/nv_net_udp.o]Error112345678
note: 在以上编译过程中我们发现,编译器提示说找不到nv_net_tools.h文件,而现实中我们也不需要这个文件的包含了,需要删除包含nv_net_tools.h 文件中的该行代码。
5.字符串提取 (命令行)
目标字符串
"from":"0802070975","to":"0802071013","url":"http://cn.update.mynetvue.com:8060/firmware/.tar.gz","md5":"","level":012
需要提取 from , to, url , md5, level 等5个关键字后面的内容。
//提取 from 内容echo
"from":"0802070975","to":"0802071013","url":"http://cn.update.mynetvue.com:8060/firmware/.tar.gz","md5":"","level":0|sed"s/.*from:(.*)/1/"|cut-d','-f1
//提取 to 内容echo
"from":"0802070975","to":"0802071013","url":"http://cn.update.mynetvue.com:8060/firmware/.tar.gz","md5":"","level":0|sed"s/.*to:(.*)/1/"|cut-d','-f1
//提取 url 内容echo
"from":"0802070975","to":"0802071013","url":"http://cn.update.mynetvue.com:8060/firmware/.tar.gz","md5":"","level":0|sed"s/.*url:(.*)/1/"|cut-d','-f1
//提取 md5 内容echo
"from":"0802070975","to":"0802071013","url":"http://cn.update.mynetvue.com:8060/firmware/.tar.gz","md5":"","level":0|sed"s/.*md5:(.*)/1/"|cut-d','-f1
//提取 level 内容echo
"from":"0802070975","to":"0802071013","url":"http://cn.update.mynetvue.com:8060/firmware/.tar.gz","md5":"","level":0|sed"s/.*level:(.*)/1/"|cut-d','-f112345678910111213141516
6.字符串提取 (脚本文件)
ret_val=""from":"0804020982","to":"0804020998","url":"http://cn.update.mynetvue.com:8060/firmware/.tar.gz","md5":"","level":0"
echoret_valis:[$ret_val]from="$(echo$ret_val|sed's/.*from":(.*)/1/'|cut-d','-f1|sed's/"//g')"
echofrom:$from
to="$(echo$ret_val|sed's/.*to":(.*)/1/'|cut-d','-f1|sed's/"//g')"
echoto:$to
url="$(echo$ret_val|sed's/.*url":(.*)/1/'|cut-d','-f1|sed's/"//g')"
echourl:$url
md5="$(echo$ret_val|sed's/.*md5":(.*)/1/'|cut-d','-f1|sed's/"//g')"
echomd5:$md5
level="$(echo$ret_val|sed's/.*level":(.*)/1/'|cut-d','-f1|sed's/"//g')"
echolevel:$
执行结果:
ret_valis:["from":"0804020982","to":"0804020998","url":"http://cn.update.mynetvue.com:8060/firmware/.tar.gz","md5":"","level":0]
from:0804020982
to:0804020998
url:http://cn.update.mynetvue.com:8060/firmware/.tar.gzmd5:
level:0
I.总结
要注意命令行执行,与脚本文件执行之间的差异性。
⑵ linux下如何将整形转化为字符串
有如下两种常用方法。
一、可以通过调用C库函数itoa实现。
1 原型。
char*itoa(int value,char*string,int radix);
2 头文件。
stdlib.h
3 功能。
将value的值,转换为字符串,并存到string中,如果转化后的字符串长度超过radix,那么只存radix位。
4 样例。
int i=1234;
char buf[10];
itoa(i, buf, 10);
执行后buf内容为字符串"1234"。
二、通过sprintf格式化输出到字符串中。
itoa并不是C语言标准库函数,所以并不是每个平台均支持该函数。当不支持时,可以用sprintf函数来达到同样效果。
1 原型。
int sprintf( char *buffer, const char *format, [ argument] … );
2 头文件。
stdio.h
3 功能。
类似于printf,根据格式化字符串format,将后续参数列表中的参数逐个输出。不过输出目标不是标准输出终端,而是字符串buffer。
4 样例。
int i=1234;
char buf[10];
sprintf(buf,"%d",i);
执行后buf内容同样为字符串"1234"。
⑶ linux c语言字符串连接函数
可以使用strcat()函数,函数原型char *strcat(char *dest,const char *src);函数说明:strcat()会将参数src字符串拷贝到参数dest所指的字符串尾。第一个参数dest要有足够的空间来容纳要拷贝的字符串。返回值:返回参数dest的字符串起始地址。
例子:
#include<string.h>
main()
{
char a[30]="string1";
char b[]="string2";
printf("before strcat():%s\n",a);
printf("after strcat():%s\n",strcat(a,b));
}
执行结果:
before strcat():string1
after strcat():string1string2
⑷ 总结linux替换字符串的几种方法
一)通过vi编辑器来替换。
vi/vim 中可以使用 :s 命令来替换字符串。
:s/well/good/ 替换当前行第一个 well 为 good
:s/well/good/g 替换当前行所有 well 为 good
:n,$s/well/good/ 替换第 n 行开始到最后一行中每一行的第一个 well 为 good
:n,$s/well/good/g 替换第 n 行开始到最后一行中每一行所有 well 为 good
n 为数字,若 n 为 .,表示从当前行开始到最后一行
:%s/well/good/(等同于 :g/well/s//good/) 替换每一行的第一个 well 为 good
:%s/well/good/g(等同于 :g/well/s//good/g) 替换每一行中所有 well 为 good
可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#well/#good/# 替换当前行第一个 well/ 为 good/
:%s#/usr/bin#/bin#g 可以把文件中所有路径/usr/bin换成/bin
(二)直接替换文件中的字符串。(此法不用打开文件即可替换字符串,而且可以批量替换多个文件。)
1.perl命令替换,参数含义如下:
-a 自动分隔模式,用空格分隔$_并保存到@F中。相当于@F = split ”。分隔符可以使用-F参数指定
-F 指定-a的分隔符,可以使用正则表达式
-e 执行指定的脚本。
-i<扩展名> 原地替换文件,并将旧文件用指定的扩展名备份。不指定扩展名则不备份。
-l 对输入内容自动chomp,对输出内容自动添加换行
-n 自动循环,相当于 while(<>) { 脚本; }
-p 自动循环+自动输出,相当于 while(<>) { 脚本; print; }
用法示例:
perl -p -i.bak -e 's/foo/bar/g' *.c
将所有C程序中的foo替换成bar,旧文件备份成.bak
perl -p -i -e "s/shan/hua/g" ./lishan.txt ./lishan.txt.bak
将当前文件夹下lishan.txt和lishan.txt.bak中的“shan”都替换为“hua”
perl -i.bak -pe 's/(d+)/ 1 + $1 /ge' file1 file2
将每个文件中出现的数值都加一
2.sed命令下批量替换文件内容
格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` 文件名
-i 表示inplace edit,就地修改文件
-r 表示搜索子目录
-l 表示输出匹配的文件名
s表示替换,d表示删除
示例:sed -i "s/shan/hua/g" lishan.txt
把当前目录下lishan.txt里的shan都替换为hua 各个Linux详细命令介绍及应用可如下进行查找
⑸ 如何写一个linux脚本,给程序A输入字符串
#!/bin/bashall=$*if [ $# -ne 10 ];then echo error|tee -a /tmp/err exit 1fisum=1for i in $alldo if [ $i -le 0 ];then echo error|tee -a /tmp/err exit 1 else sum=`expr $sum \* $i` fidoneecho $sum
⑹ linux变量字符串替换问题
换个角度,替换/bin为/BIN就不会有错啦
echo${path//bin//BIN}
其中/前面要加转义符
或者用sed来替换,
echo$path|sed's#/bin#/BIN#g'
格式为s#A#B#,将A替换为B。
后面加个g表示全局替换,即替换所有出现的。
也可以这样写:
echo$path|sed's#[^s]bin#/BIN#g'
[^s]在正则中表示不是s的一个字符。这里只有两种情况,一种是sbin,一种是/bin,这样sbin就可以被排除了。
⑺ 如何在Linux中用C语言创建一个字符串(0x01 0x02 0x03……0x50)
首先,0x50比50大,其次你程序定义的两个指针无法存放字符串,只能用来指向一个已经存在的字符串。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() { char data[0x50+1]={0}; int i;
for ( i=0;i<0x50;i++ ) data[i]=i+1;
data[i]=0;
printf("%s\n",data);
return 0;
}
⑻ linux 中c语言字符串的结束符是什么
c语言的字符串是一种标准
不管是在何种操作系统下它的定义都是一样的
而c语言字符串的结束符是数字0
可以通过一个简单的程序来观看
#include<stdio.h>
intmain(intargc,char**argv)
{
chars[]="hello";
inti;
for(i=0;i<sizeof(s);++i)
printf("s[%d]=%d ",i,s[i]);
return0;
}
输出的结果为
s[0] = 104
s[1] = 101
s[2] = 108
s[3] = 108
s[4] = 111
s[5] = 0
可以看出结束符正是数字0