是否可以为awk的gsub函数使用备用分隔符?

时间:2015-05-12 06:39:31

标签: regex awk gsub

awk中考虑以下替代。

import urllib.request
import time
import socket

nf = urllib.request.urlopen("http://192.168.1.2")
start_loadf = time.time()
page = nf.read()
end_loadf = time.time()
nf.close()
reading_time = format(end_loadf-start_loadf,'.3f')
print("Kaynaktan alinan ilk okuma suresi : ", reading_time , "sn.")

输出如下。

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的备用分隔符吗?

如果是,那么允许的备用分隔符是什么?

2 个答案:

答案 0 :(得分:1)

您可以使用双引号作为分隔符。

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

但是在处理反斜杠时要小心,因为你需要使用四个反斜杠才能匹配单个反斜杠。

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

答案 1 :(得分:0)

NoMethodError (undefined method `update' for nil:NilClass): app/controllers/boat_steps_controller.rb:32:in `update' 中只有正则表达式的分隔符为awk,但您可以像Avinash所示,搜索字符串/。别无选择。