簡體   English   中英

可以將替代分隔符用於awk的gsub函數嗎?

[英]Is it possible to use alternate delimiters for awk's gsub function?

考慮以下awk替換。

echo 'hello/bar/goo'  | awk '{gsub(/\//,"foo"); print}'

輸出如下。

hellofoobarfoogoo

注意,我們必須逃出/在第一個參數gsub因為/是正則表達式中awk的默認分隔符gsub功能。

考慮到我們可以通過以下分隔符更改來解決sed的相同問題,我想知道gsub是否可以實現相同的目的。

echo 'hello/bar/goo'  | sed 's!/!foo!g'

我嘗試了以下兩種方法,但是它們會導致語法錯誤。

echo 'hello/bar/goo'  | awk '{gsub(!/!,"foo"); print}'                                                                                                         
awk: cmd. line:1: {gsub(!/!,"foo"); print}
awk: cmd. line:1:         ^ unterminated regexp
awk: cmd. line:2: {gsub(!/!,"foo"); print}
awk: cmd. line:2:                         ^ unexpected newline or end of string

echo 'hello/bar/goo'  | awk '{gsub(|/|,"foo"); print}'
awk: cmd. line:1: {gsub(|/|,"foo"); print}
awk: cmd. line:1:       ^ syntax error
awk: cmd. line:1: {gsub(|/|,"foo"); print}
awk: cmd. line:1:         ^ unterminated regexp

我可以在awk設置一些選項來允許gsub使用替代定界符嗎?

如果是這樣,允許的替代定界符是什么?

您可以使用雙引號作為分隔符。

echo 'hello/bar/goo'  | awk '{gsub("/","foo"); print}'

但是在處理反斜杠時要小心,因為您需要依次使用四個反斜杠才能匹配單個反斜杠。

$ echo 'hello/bar\goo' | awk '{gsub("\\\\","foo"); print}'
hello/barfoogoo

/ awk只有正則表達式的分隔符是/ ,但是您可以像Avinash所示的那樣,搜索字符串"something" 沒有其他選擇。

暫無
暫無

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

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