![](/img/trans.png)
[英]How to use cut and paste commands as a single line command without using grep,sed awk, perl?
[英]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.