这是示例数据:
ServerA
Value1 fh824rfz
Plan CustomA
ServerB
Value3 9fgjzxlo
Plan CustomD
ServerC
Value10 339fgh0l
Plan CustomE
Run Code Online (Sandbox Code Playgroud)
这是正则表达式的工作原理vscode:
(Value[0-9]{1,2} [0-9a-z]{8}\n)(.*)
Run Code Online (Sandbox Code Playgroud)
预期输出:
ServerA
Value1 fh824rfz
ServerB
Value3 9fgjzxlo
ServerC
Value10 339fgh0l
Run Code Online (Sandbox Code Playgroud)
但我正在尝试使用sed这样的正则表达式,但它们不起作用:
-E 's|(Value[0-9]{1,2} [0-9a-z]{8}\n)(.*)\n|\1|g'
-re 's|(Value[0-9]{1,2} [0-9a-z]{8}\n)(.*)\n|\1|g'
-zre 's|(Value[0-9]{1,2} [0-9a-z]{8}\n)(.*)\n|\1|g'
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我认为问题在于\n,因为当我删除它时,示例可以工作(但仍然不是预期的输出)。
这是一种方法(使用 进行检查GNU sed,语法可能因其他实现而异):
$ sed -E '/Value[0-9]{1,2} [0-9a-z]{8}$/{n; d}' ip.txt
ServerA
Value1 fh824rfz
ServerB
Value3 9fgjzxlo
ServerC
Value10 339fgh0l
Run Code Online (Sandbox Code Playgroud)
n命令打印模式空间(如果选项未禁用自动打印-n),将其替换为下一行并将d其删除。