[英]How to use word boundaries in awk without using match() function?
我想為這個awk命令添加單詞邊界:
awk '{$0=tolower($0)};/wordA/&&/wordB/ { print FILENAME ":" $0; }' myfile.txt
我嘗試在wordA
和wordB
左右wordA
添加\\y
,但它在我的測試中不起作用。
我試過這個: /\\ywordA\\y/&&/\\ywordB\\y/
謝謝大家!
(ps:我是awk的新手所以我試圖避免使用match()函數。)
你想使用gawk而不是awk:
gawk '{$0=tolower($0)};/\ywordA\y/&&/\ywordB\y/ { print FILENAME ":" $0; }' myfile.txt
如果你的系統有gawk(例如在Mac OS X上),它會做你想要的。 \\ y是awk的GNU擴展。
\\<
和\\>
約定。 如果你堅持使用一個頑抗的awk,那么因為awk通常會將行分成標記,所以使用它可能是有意義的:
function word(s, i) { for (i=1;i<=NF;i++) {if ($i ~ "^" s "$") {return i}}; return 0; }
所以,例如,而不是寫作
/\<[abc]\>/ { print "matched"; }
你可以輕松地寫:
word("[abc]") { print "matched"; }
這可能適用於Mac OS X :
awk '{$0=tolower($0)};/[[:<:]]wordA[[:>:]]/&&/[[:<:]]wordB[[:>:]]/ { print FILENAME ":" $0; }' myfile.txt
但是因為它不適用於linux,所以最好安裝GNU awk。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.