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