[英]Ignorecase in awk creates unintentional output
我剛開始編寫腳本(2個月),在wk中使用Ignorecase遇到了一個我不理解的問題。 我在使用sed時已經有解決方案,但我仍然想知道為什么發生以下情況以及如何避免這種情況。
從這條線;
echo foo.BAZ.bar | awk 'IGNORECASE = 1;{gsub(/'.baz.'/,"'.'")};{print}'
我得到了輸出,
foo.BAZ.bar foo.bar
但我只希望輸出foo.bar
。 可以通過刪除IGNORECASE = 1;
來避免上述行為IGNORECASE = 1;
從行開始,但這意味着.BAZ.
,當然不會從foo.BAZ.bar
刪除。 這種行為對我來說似乎很奇怪,非常不可取!
感謝您的任何輸入,不勝感激:)
文斯
kent$ echo foo.BAZ.bar|awk -v IGNORECASE=1 '{gsub(/.baz./,".")}7'
foo.bar
您需要做:
echo foo.BAZ.bar | awk 'BEGIN{IGNORECASE = 1}{gsub(/[.]baz[.]/,".")}1'
當你明確表示;
在IGNORECASE
語句之后,您的行將按任何修改之前的原樣打印,因為該操作返回的是true,而awk
打印該行。 一旦gsub
修改了該行,顯式print
就會打印修改后的行。
另外,請注意,字符串保留在gsub
函數中。
更新:如Ed的評論所述,使用先前的解決方案將針對每一行測試IGNORECASE變量。 將其放在BEGIN部分中會分配一次,並將其用於整個文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.