Yek*_*vel 2 bash regular-expression delete
我正在尝试编写一个脚本,使用两个不同的可执行文件对 valgrind 的输出执行差异,但每行开头的进程 ID 乱扔我的差异输出。我正在尝试使用 bash 命令将其删除,但似乎无法成功。
到目前为止,这是我的代码:
VG_MY=$((valgrind --leak-check=full ./executable < inputfile) 2>&1)
VG_MY=${VG_MY//[0-9]/}
Run Code Online (Sandbox Code Playgroud)
这从 VG_MY 中删除所有数字,与此相同:
VG_MY="${VG_MY//[[:digit:]]/}"
Run Code Online (Sandbox Code Playgroud)
我尝试以多种方式添加 == 部分,但都没有奏效。我最接近的是:
VG_MY="${VG_MY//[==[:digit:]==]/}"
Run Code Online (Sandbox Code Playgroud)
从 valgrind 输出中删除所有数字 AND '=' 。我需要弄清楚我缺少什么,以便从 valgrind 输出中仅删除由 '=' 括起来的数字,如下所示:==123456==。
编辑:valgrind 输出示例:
==94953== Memcheck, a memory error detector
==94953== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==94953== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==94953== Command: ./executable
==94953==
==94953==
==94953== HEAP SUMMARY:
==94953== in use at exit: 0 bytes in 0 blocks
==94953== total heap usage: 13 allocs, 13 frees, 232 bytes allocated
==94953==
==94953== All heap blocks were freed -- no leaks are possible
==94953==
==94953== For counts of detected and suppressed errors, rerun with: -v
==94953== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 8 from 6)
Run Code Online (Sandbox Code Playgroud)
使用ksh或bash -O extglob(或shopt -s extglob在bash脚本中之后)或zsh -o kshglob(或set -o kshglob在zsh脚本中之后):
VG_MY=${VG_MY//+(=)+([0-9])+(=)/}
Run Code Online (Sandbox Code Playgroud)
这+(...)是一个类似于+扩展正则表达式运算符的 ksh 扩展 glob 。+(x)匹配一个或多个xs。
因此,上面删除了一个或多个=s 后跟一个或多个十进制数字后跟一个或多个=s 的所有序列,就像sed -E 's/=+[0-9]+=+//g'¹ 一样。
并不是说它无法删除 456==内部,==123====456==因为第一次替换会删除==123====留下与模式不匹配的东西。为了能够删除这些,您可以将其更改为:
VG_MY=${VG_MY//+(=)[0-9]*([0-9=])=/}
Run Code Online (Sandbox Code Playgroud)
(喜欢sed -E 's/=+[0-9][0-9=]*=//g')
Withzsh自己的扩展 globs ( zsh -o extendedglob):#相当于 ERE*和##ERE +(和(#c1,3)of {1,3})。所以,你可以这样做:
set -o extendedglob
VG_MY=${VG_MY//=##[0-9]##=##/}
Run Code Online (Sandbox Code Playgroud)
¹ 请注意,虽然有几个sed实现支持-E扩展正则表达式,但它还不是标准的,您偶尔会发现一些不支持它的实现。有了这些,您可以跳过-E并\{1,\}用作 BRE 替代品+(或使用==*代替=+)。
| 归档时间: |
|
| 查看次数: |
251 次 |
| 最近记录: |