如何解决匹配特定单词,但不包括以“?”开头的单词
当这个单词也以CSV文件内的问号开头时,我很难找到该单词的匹配方式。我需要使用tcsh代码。
我的意思是我可以匹配“ cat”,但不包括“ zcat”,但其中包括“?cat”。这是我的代码:
#!/bin/tcsh -f
set viewSet = PRE_IMPL
set nbViewSet=`awk -F ";" '{ for (i=1; i<=NF; i++) { if ($i == "VIEW SETS") print i } }' csv.csv`
/usr/bin/awk -F ";" -v col="$nbViewSet" '(match($col,'"/\<"$viewSet"\>/"') != 0) {print}' csv2.csv
STANDARD KEYS;COMPATIBLE KEYS;CELL KEY;COND KEY;WORKSPACE PATH;VIEW PATH;CATEGORIES;CONDS SECTION;VIEW SETS;TYPES
;;;;;;;;PRE_IMPL;
;;;;;;;;zPRE_IMPL;
;;;;;;;;?PRE_IMPL;
;;;;;;;;PRE_IMPL;
所以在这里我只想匹配单词“ PRE_IMPL”,而不匹配“ zPRE_IMPL”或“?PRE_IMPL”。我的代码设法排除了“ zPRE_IMPL”,但没有排除“?PRE_IMPL”,并且我没有设法改变它,输出为:
;;;;;;;;PRE_IMPL;
;;;;;;;;?PRE_IMPL;
;;;;;;;;PRE_IMPL;
如何更改代码以仅匹配“ PRE_IMPL”?
解决方法
您可以使用诸如(^|[^?])PRE_IMPL
之类的正则表达式来要求匹配项位于字段的开头或非问号字符旁边。
根据需要,这里不必两次运行Awk。 (或者在一个地方使用/usr/bin/awk
,在另一个地方使用awk
。)
awk -F ";" -v viewSet="$viewSet" '
NR==1{ for (i=1; i<=NF; i++) if ($i == "VIEW SETS") col=i; next }
match($col,"(^|[^?])" viewSet "\>")' csv2.csv
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。