簡體   English   中英

在以下示例中,如何僅通過一個awk / sed命令更改grep和cut命令?

[英]How to change grep and cut commands by only one awk/sed command in the following example?

我有一個文件包含:

aaa.bbbb0.xxxx0=toto
aaa.bbbb0.xxxx1=toto
aaa.bbbb0.xxxx2=titi
eee.ffff.zzzz=kkkk

我想提取包含正則表達式"aaa\\.bbbb0\\.xxxx[0-6]\\+=toto" ,然后提取路徑中的第三個元素。 所以輸出應該這樣

xxxx
yyyy

我可以使用grep獲取此輸出,然后以這種方式cut

cat myfile.txt | grep "aaa\.bbbb0\.xxxx[0-6]\+=toto" | cut -d'=' -f1 | cut -d'.' -f3

如何更改上述grep並僅通過一個sed命令或awk命令進行cut

回答上一個問題:

awk -F'[.=]' '$4 ~ /^[[:digit:]]+$/ {print $3}' file

當前問題的答案:

$ awk -F'[.=]' '/aaa\.bbbb0\.xxxx[0-6]+=toto/ {print $3}' file
xxxx0
xxxx1
awk -F[.=] '/=mmmm/{print $3}' input.txt

要匹配您第一次編輯的數據:

awk -F[=] '$2 ~ /^[0-9]+(\.[0-9]+)?$/{split($1,a,".");print a[3]}' input.txt

這也將匹配浮點數

並進行第二次編輯

awk -F= '/aaa\.bbbb0\.xxxx[0-6]+=toto/{split($1,a,".");print a[3]}' input.txt

使用 grep -P選項啟用PCRE,可以使用正向Lookahead和Lookbehind獲得輸出。

 
 
 
 
  
  
  $ cat file aaa.bbbb.xxxx=4521 ccc.dddd.yyyy=7842 eee.ffff.zzzz=kkkk
 
 
  

 
 
 
 
  
  
  $ grep -oP '(?<=\\.)(\\w+)(?==\\d+$)' file xxxx yyyy
 
 
  

另一個awk變體:

$ awk -F. '/aaa\.bbbb0\.xxxx[0-6]+=toto/{split($3,a,/=/); print a[1]}' file
xxxx0
xxxx1

根據更新的問題:

 $ awk -F. '/aaa\\.bbbb0\\.xxxx[0-6]+=toto/{split($3,a,/=/); print a[1]}' file xxxx0 xxxx1 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM