我需要一种方法来重做命令行输出,为它添加前缀。我想我只是不理解使这项工作所需的SED语法。
目标是一个bash shell,它将在特定服务器上快速显示Active WebSphere配置文件。
我的第一次尝试使用ps -ef命令,显示活动进程,然后显示grep命令以仅显示感兴趣的进程。这拉动了所需的结果,但是ps -ef命令的最后一列太长了,没有价值。
顺便说一下,我在AIX上运行,egrep -o不适合我。
我的第二次尝试是使用sed -n命令在命令输出字符串中搜索感兴趣的配置文件。这让我更接近理想的结果。
#!/usr/bin/bash
body() {
# print the header (the first line of input)
# and then run the specified command rest of the input
# Usage example ps | body grep somepattern
IFS= read -r header
printf '%s\n' "$header"
"$@"
}
echo -e "\n-----------------------";
grepString="Cog[CGR][MWS][123]Profile" ## Regular Expression for names of WebSphere profiles
# first attempt
ps -ef | ( body egrep $grepString | sort -k5 ) | cut -c1-180
# second attempt
ps -ef | ( body sed -n "s/.*\($grepString\).*/\1/p" | sort -k1 )
我的第二次尝试产生了如下结果:
UID PID PPID C STIME TTY TIME CMD
CogCM1Profile
CogCM2Profile
CogGW1Profile
CogGW2Profile
CogRS1Profile
CogRS2Profile
CogRS3Profile
现在,如果我只能附加其余的命令输出,我很乐意得到这样的结果。
Profile UID PID PPID C STIME TTY TIME CMD
CogCM1Profile wasadmin 3540106 1 0 Mar 11 - 3:01 /APPS/IBM/WebSphere/AppServer_std/java/bin/java -Declipse.security -Dwas.status.socket=47507
CogCM2Profile wasadmin 3211972 1 0 Mar 11 - 3:35 /APPS/IBM/WebSphere/AppServer_std/java/bin/java -Declipse.security -Dwas.status.socket=47946
CogGW1Profile wasadmin 1639922 1 0 Mar 11 - 4:16 /APPS/IBM/WebSphere/AppServer_std/java/bin/java -Declipse.security -Dwas.status.socket=47722
CogGW2Profile wasadmin 3866760 1 0 Mar 11 - 7:18 /APPS/IBM/WebSphere/AppServer_std/java/bin/java -Declipse.security -Dwas.status.socket=42506
CogRS1Profile wasadmin 3670356 1 1 Mar 11 - 20:43 /APPS/IBM/WebSphere/AppServer_std/java/bin/java -Declipse.security -Dwas.status.socket=46643
CogRS2Profile wasadmin 3932926 1 0 Mar 13 - 12:37 /APPS/IBM/WebSphere/AppServer_std/java/bin/java -Declipse.security -Dwas.status.socket=50583
CogRS3Profile wasadmin 2294788 1 0 Mar 13 pts/6 10:11 /APPS/IBM/WebSphere/AppServer_std/java/bin/java -Declipse.security -Dwas.status.socket=50452
答案 0 :(得分:0)
如果我了解您正确尝试的内容,那么
# vv-- here
ps -ef | ( body sed -n "s/.*\($grepString\).*/\1 &/p" | sort -k1 )
应该有效。 sed &
命令的替换部分中的s
指的是正则表达式匹配的东西,在这种情况下是整行。
为了修复标题,你可以输入一个只涉及第一行的替代品,如下所示:
ps -ef | ( body sed -n "1 s/^/Profile /p; s/.*\($grepString\).*/\1 &/p" | sort -k1 )
空格量可能需要变化(我没有AIX来测试任何这些)。