我是 Unix 脚本的新手,所以请耐心等待。
我得到了一个文件,其中包含有关每行进程的信息。我需要从每一行中提取有关这些过程的某些信息。
文件示例 -
process1 port=1234 appID=dummyAppId1 authenticate=true <some more params>
process3 port=1244 authenticate=false appID=dummyAppId2 <some more params>
process2 appID=dummyAppId3 port=1235 authenticate=true <some more params>
Run Code Online (Sandbox Code Playgroud)
所需的输出是 -
1
port=1234 authenticate=true appID=dummyAppId1
2
port=1244 authenticate=false appID=dummyAppId2
3
port=1235 authenticate=true appID=dummyAppId3
Run Code Online (Sandbox Code Playgroud)
每行的数字 1、2 和 3 仅表示输出文件的行号。
我已经尝试使用该sed
s/
命令,但它是特定于顺序的,而输入文件中的参数不遵循顺序 - 因此,输入文件中的某些行被跳过。
这是我的命令-
sed -nr 'appId/s/(\w+).*port=([^ ]+) .*authenticate=[^ ]+) .*appId=[^ ]+) .*/\2\t\3\t\4/p' | sed =
Run Code Online (Sandbox Code Playgroud)
任何人都可以指导我如何不考虑顺序提取这些参数吗?
谢谢!
编辑 1:我设法以这种方式使用 grep 的后视零宽度断言功能 -
grep -Po '(?<=pattern1=)[^ ,]+|(?<=pattern2=)[^ ,]+|(?<=pattern3=)[^ ,]+|(?<=pattern4=)[^ ,]+' filename …
Run Code Online (Sandbox Code Playgroud)