Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用变量中的数据时如何在awk中使用单词边界_Bash_Awk - Fatal编程技术网

Bash 使用变量中的数据时如何在awk中使用单词边界

Bash 使用变量中的数据时如何在awk中使用单词边界,bash,awk,Bash,Awk,我在awk var="blue" 我只需要或多或少带有蓝色的行 如果我这样做: awk '/\<blue\>/' file blue more more blue fine blue, not awk-v test=“$var””$0~“\\”文件 蓝色+绿色更多 更蓝+ 精细蓝色+,不是 完美。对于普通的awk,这可能吗?不完全可能。对于仅仅搜索,您可以使用$0~”(^[^[:alnum:][u])“test”([^[:alnum:][u].$)”,但如果您使用它来使用匹

我在
awk

var="blue"
我只需要或多或少带有
蓝色的行

如果我这样做:

awk '/\<blue\>/' file
blue more
more blue
fine blue, not
awk-v test=“$var””$0~“\\”文件
蓝色+绿色更多
更蓝+
精细蓝色+,不是

完美。对于普通的
awk
,这可能吗?不完全可能。对于仅仅搜索,您可以使用
$0~”(^[^[:alnum:][u])“test”([^[:alnum:][u].$)”
,但如果您使用它来使用
匹配()
或类似方法打印匹配字符串,那么很不幸,这会占用边界字符。@EdMorton我正要发布这个答案<代码>:P
。请参阅我更新的帖子。似乎我的一些var确实包含
+
,这阻止了解决方案。最终和有效的解决方案。我知道模式在行尾,模式在“=”之后,我确实使用
RS=“”
与组进行协作。所以我得到了:
awk-v test=“$var”BEGIN{gsub(/\+/,“\\\\\&”,test)}$0~“=*“test”*\n”
现在可以很好地使用
+
谢谢:)在这个上下文中
+
意味着什么?它是文字加号还是表示1次或多次重复的regexp元字符?@EdMorton这是某个产品的名称,
+
是名称的一部分,以说明它是更好的型号:)
awk '/\<blue\>/' file
blue more
more blue
fine blue, not
awk '$0~"\<"test"\>"' test="$var" file
awk '$0~/\</test/\>/' test="$var" file
awk '{a="\<"test"\>"} $0~a' test="$var" file
var="blue+"
cat file
test
blue+green more
bluegrass not
yes red
more blue+
fine blue+, not
awk -v test="$var" '$0~"\\<"test"\\>"' file
blue+green more
more blue+
fine blue+, not
awk -v test="$var" '$0~"\\<"test"\\>"' tfile
awk -v test="$var" '
    (s=index($0,test)) &&                            # test exists and is neither
    ((s>1?substr($0,s-1,1):"") !~ /[[:alnum:]_]/) && # preceded by a word char nor
    (substr($0,s+length(test),1) !~ /[[:alnum:]_]/)  # succeeded by a word char
'