我写了一个正则表达式来尝试使用 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
Run Code Online (Sandbox Code Playgroud)
无match功能:
awk '
/^studentNum=="[0-9]+"{.*}$/{
sub(/^[^"]*/,"XXX==")
}
1
' Input_file
Run Code Online (Sandbox Code Playgroud)
说明:简单的解释是:使用此处的match函数awk来匹配 studentNum=="digits"{ 直到行尾。然后"用XXX==匹配值替换从开始到第一次出现的所有内容,然后打印匹配值。
奖励解决方案(带匹配):如果您有与条件不匹配的行并且您想打印匹配条件和不匹配的两行,请尝试以下操作:
awk '
match($0,/^studentNum=="[0-9]+"{.*}$/){
val=substr($0,RSTART,RLENGTH)
sub(/^[^"]*/,"XXX==",val)
$0=val
}
1
' Input_file
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |