regex - awk gsub 正则表达式,匹配单词不在双引号中
问题描述
我编写了一个正则表达式来尝试使用 gsub 和 awk 替换每个不在双引号中的单词。然而,即使该表达式适用于在线计算器,该表达式也不会替换我脚本中的任何内容。
输入 =
studentNum=="00000"{print name, "is the prof"}
表达:
gsub( "studentNum(?=[^"]*(?:"[^"]*"[^"]*)*$)", "XXX", input)
预期输出:
XXX=="00000"{print name, "is the prof"}
解决方案
带match
功能:awk
不支持前瞻机制,您展示的示例请尝试以下。
awk '
match($0,/^studentNum=="[0-9]+"{.*}$/){
val=substr($0,RSTART,RLENGTH)
sub(/^[^"]*/,"XXX==",val)
print val
}
' Input_file
无match
功能:
awk '
/^studentNum=="[0-9]+"{.*}$/{
sub(/^[^"]*/,"XXX==")
}
1
' Input_file
解释:简单的解释是:使用match
函数awk
来匹配 studentNum=="digits"{ 直到行尾。"
然后用替换从开始到第一次出现的所有内容XXX==
,然后打印匹配值。
奖励解决方案(匹配):如果您有不匹配条件的行,并且您想打印匹配条件和不匹配两行,请尝试以下操作:
awk '
match($0,/^studentNum=="[0-9]+"{.*}$/){
val=substr($0,RSTART,RLENGTH)
sub(/^[^"]*/,"XXX==",val)
$0=val
}
1
' Input_file
推荐阅读
- form-recognizer - 在表单识别器中实现反馈循环和重新训练的解决方法
- docker - Tomcat Web 应用程序未接收通过 AWS ELB 发送的请求
- ios - 如何在没有 NavigationLink 的情况下使用 SwiftUI 推送新的根视图?
- javascript - 如何为我的猜谜游戏实现一个随机数,直到用户猜到它才会不断变化?
- javascript - 为什么这个 PIXI.js 代码会占用大量内存?
- php - PHP中strlen()函数的源代码在哪里?
- javascript - node-gyp 的鸡与蛋问题:指向依赖项中的头文件
- html - 在服务器上部署 create-react-app 时图标 png 文件无法加载
- r - 为什么在 rcpp 中实现的快速排序工作缓慢?
- r - 用于良好数字分割的 R 程序