① 求教awk兩個字元之間截取字元串的方法
假設有字元串:
1
str="abcdefg"
要截取c和f之間的字元串,得到de。
可以用split函數,以c和f為分隔符,將字元串分割,取分割後的第二個欄位。
1
echo "$str" | awk '{split($0,a,"[cf]");print a[2]}'
另一種方法,也可以分別計算出c和f在字元串中的位置,然後根據截取字元串的起始位置(c的位置+1)和截取長度(f的位置-c的位置-1),用substr函數來得到截取後的字元串。
1
echo "$str" | awk '{a=index($0,"c");b=index($0,"f");print substr($0,a+1,b-a-1)}'
sed也可以做:
1
echo "$str" | sed -r 's/.*c(.*)f.*/\1/'
簡單介紹下Shell字元串截取的詳細方法,如截取指定字數、按指定的字元串截取、按指定要求分割。
一、Linux shell 截取字元變數的前8位,有方法如下:
③ Linux命令怎麼截取兩個字元之間的字元串 如1111[2222]3333 怎麼截取2222前
這個很簡單啦,寫一個給你吧,最簡單又能理解的
echo '1111[2222]3333' | awk -F '[' '{ print $2 }' | awk -F ']' '{ print $1 }'
或者
echo '1111[2222]3333' | cut -d '[' -f 2 | cut -d ']' -f 1
④ linux awk命令怎麼用
awk命令是Alfred Aho, Peter Weinberger, Brian Kernighan三位作者聯合開發的,用於Linux/Unix中處理數據和產生報告。awk命令功能十分強大,可根據需要抓取、截取指定的列或行。
首先在/mnt目錄下創建示例文本文件f1,其內容如下:
1 hello hello
2 data data
3 xyz abc
4 123 789
5 ftp
6 Apache
7 apache
然後,使用awk對f1文件內容進行處理,舉例如下。
①awk -F " " '{print $2,$3}' f1:截取顯示文檔的第二列和第三列,-F指定分隔符為空格,$表示顯示第幾列。其中print表示要做輸出信息的動作,$2和$3表示要輸出的列號,awk要求將print已經輸出列等內容放在「'{}'」之間。
②awk -F " " '($1>3){print $2,$3}' f1:選取第一列的值大於3的行,顯示其第二列和第三列,在「()」中指定篩選條件。
③awk 'NR==4 || NR==3' f1:顯示第三行和第四行,NR表示行號。
④awk '/data/ {print $2}' f1:抓取包含指定字元的行,再對列進行截取。此例中,awk先按照「data」字元串對文件f1中的行篩選,找出包含「data」的行以後,再按照默認的空格作為分隔符對行的內容做切割,僅列印出第二列的內容。
⑤awk '$2 ~ /data/ ' f1:抓取第二列包含指定字元的行。其中「~」表示是否匹配指定的「data」,如果第二列的內容包含「data」就列印出整行內容。
⑥awk '$2 !~ /data/ ' f1:抓取第二列不包含指定字元的行。其中「!~」表示是否不匹配指定的「data」,如果第二列的內容不包含「data」就列印出整行內容。
⑤ Linux下如何用一個指定的字元串去分割另一個字元串
Linux下可以用strstr()函數定位子串所在的位置,用來實現用子串分隔一個字元串。man strstr可以看函數相關介紹
$manstrstr
NAME
strstr-locateasubstring
SYNOPSIS
#include<string.h>
char*strstr(constchar*haystack,constchar*needle);
DESCRIPTION
Thestrstr().Theterminating` 'charactersarenotcompared.
strstr()函數實現從haystack串中,查找第一次出現的needle子串,只比較有效字元,結束符 不算在內。
如:
#include<stdio.h>
#include<string.h>
intmain()
{
chars[]="abc@#123@#def@456@#ghi#789";
charsub[]="@#";
char*pc,*pb;
pb=pc=s;//pb指向字元串頭
while(pc=strstr(pc,sub))//查找匹配字元串位置
{
*pc='