打印字段也包含 FS 字符?

zun*_*arz 3 regex awk cut sed

要在 AWK 中处理的记录具有以下可能的格式:

foobar是固定长度,serialno是可变长度,我想捕获的字段可能包含零个或多个下划线。

foobar_823932230_processname.txt
foobar_82393280_process_name.txt
foobar_8239330_foo_process_name.txt
Run Code Online (Sandbox Code Playgroud)

期望输出

processname
process_name
foo_process_name
Run Code Online (Sandbox Code Playgroud)

如果我使用,FS="[_.]"那么我可以print $3用于第一条记录,但不适用于第二条和第三条记录。

如何捕获序列号和 .txt 之间的所有内容?

我正在编辑需要更改的旧版 AWK 代码。一旦我正确捕获了这个字段,awk 进程就会继续生成额外的输出。

anu*_*ava 6

cut + cut也应该有效:

cut -d_ -f3- file | cut -d. -f1
Run Code Online (Sandbox Code Playgroud)
processname
process_name
foo_process_name
Run Code Online (Sandbox Code Playgroud)

一个awk解决方案是使用这个正则表达式:

awk '{gsub(/^([^_]+_){2}|\..*$/, "")} 1' file
Run Code Online (Sandbox Code Playgroud)