替换字符串,但忽略引号之间的字符串(命令行)

替换字符串,但忽略引号之间的字符串(命令行)

我正在尝试使用 gsar 用十六进制值替换文件中文本中的字符串,但我怀疑 gsar 是否可以解决这个问题:)

原文:

打印“这是打印” “打印” “*:;PRINT'”打印“打印” “打印”PrInT

“gsar”完成其工作后应该是:

XXXX“这是打印” “打印” “*:;PRINT'” XXXX“打印” “打印” XXXX

(XXXX代表十六进制值a5)

我只想用十六进制值 a5 替换单词“print”(不区分大小写),但前提是它不在引号之间。另外,请注意,引号与源文件中的十六进制值相同!(0x22)

代码:gsar -s“print”-r:x22 -o file.txt 当然也会替换引号之间的单词,但不会替换大小写不同的单词。

这可能吗?:)如果有人能帮助我,我会很高兴。

答案1

对于此类替换,最好先匹配我们想要保留的内容(即引号之间的值),然后断言失败,然后匹配其余部分。
这可以使用动词(*SKIP)和来完成(*FAIL)

  • Ctrl+H
  • 找什么:"[^"]+"(*SKIP)(*FAIL)|\w+
  • 用。。。来代替:XXXX
  • 查看 环绕
  • 查看 正则表达式
  • Replace all

解释:

"           # double quote
[^"]+       # 1 or more non double quote
"           # double quote
(*SKIP)     # skip what was matched
(*FAIL)     # and consider the match failled
  |           # OR
\w+         # 1 or more word character

截图(之前):

在此处输入图片描述

截图(之后):

在此处输入图片描述

相关内容