awk gensub 正则表达式匹配方括号之间的组

awk gensub 正则表达式匹配方括号之间的组
  • 从记录输入$0
    -0.005 Tc 0.005 Tw [(T)-8.5(o)-3.2(p)-15.3(ik)]TJ
    
  • 请输出/1gensub
    (T)-8.5(o)-3.2(p)-15.3(ik)
    

答案1

$ s='-0.005 Tc 0.005 Tw [(T)-8.5(o)-3.2(p)-15.3(ik)]TJ'

$ # if you want to delete []TJ
$ echo "$s" | awk '{print gensub(/\[([^]]+)]TJ/, "\\1", "g")}'
-0.005 Tc 0.005 Tw (T)-8.5(o)-3.2(p)-15.3(ik)

$ # if you just want the portion inside []TJ
$ echo "$s" | awk 'match($0, /\[([^]]+)]TJ/, a){s = a[1]; print s}'
(T)-8.5(o)-3.2(p)-15.3(ik)

GNU awk支持方法的第三个参数match,这使得提取捕获组变得容易。数组的第一个元素将具有整个匹配项。第二个元素将包含与第一组匹配的部分,第三个元素将包含与第二组匹配的部分,依此类推。

答案2

$ echo '-0.005 Tc 0.005 Tw [(T)-8.5(o)-3.2(p)-15.3(ik)]TJ' |
    awk '{print gensub(/.*\[([^]]+)]TJ/,"\\1",1)}'
(T)-8.5(o)-3.2(p)-15.3(ik)

像 regex101 这样的网站实际上对于确定在命令行工具中使用的正则表达式毫无用处,因为它们没有充分考虑正则表达式版本(BRE、ERE 或 PCRE)和/或任何给定工具使用的分隔符和/或该工具是否支持正则表达式中的反向引用和/或匹配文本和/或给定工具的给定版本是否具有任何私有扩展,和/或该工具可能影响其行为的任何选项与正则表达式等。

相关内容