b/w下面有两个sed命令有什么区别?

Man*_*ive 2 regex unix aix ksh sed

有关我工作环境的信息:

$ uname -a  
AIX prd231 1 6 00C6B1F74C00  
$ oslevel -s  
6100-03-10-1119
Run Code Online (Sandbox Code Playgroud)

代码块A.

( grep schdCycCleanup $DCCS_LOG_FILE | sed 's/[~]/ \
/g' | grep 'Move(s) Exist for cycle' | sed 's/[^0-9]*//g' ) > cycleA.txt
Run Code Online (Sandbox Code Playgroud)

代码块B.

( grep schdCycCleanup $DCCS_LOG_FILE | sed 's/[~]/ \n/g' | grep 'Move(s) Exist for cycle' | sed 's/[^0-9]*//g' ) > cycleB.txt
Run Code Online (Sandbox Code Playgroud)

我有两个代码块(如上所示),它们使用sed将输入修剪为6位数,但是一个命令的行为与我预期的不同.

两个代码块的输入样本

Mar 25 14:06:16 prd231 ajbtux[33423660]: 20160325140616:~schd_cem_svr:1:0:SCHD-MSG-MOVEEXISTCYCLE:200705008:AUDIT:~schdCycCleanup - /apps/dccs/ajbtux/source/SCHD/schd_cycle_cleanup.c - line 341~ SCHD_CYCLE_CLEANUP - Move(s) Exist for cycle 389210~
Run Code Online (Sandbox Code Playgroud)

当上面的示例输入通过两个代码块时,我得到以下输出.

cycleA.txt内容

389210
Run Code Online (Sandbox Code Playgroud)

cycleB.txt内容

25140616231334236602016032514061610200705008341389210
Run Code Online (Sandbox Code Playgroud)

据我所知,我的最后一个管道sed命令(sed's/[^ 0-9]*// g')正在删除除数字以外的所有字符,因此我将其从块代码中省略,并将输出放在另外两个文件中.我得到以下输出.

cycleA1.txt内容

 SCHD_CYCLE_CLEANUP - Move(s) Exist for cycle 389210
Run Code Online (Sandbox Code Playgroud)

cycleB1.txt内容

Mar 25 15:27:58 prd231 ajbtux[33423660]: 20160325152758: nschd_cem_svr:1:0:SCHD-MSG-MOVEEXISTCYCLE:200705008:AUDIT: nschdCycCleanup - /apps/dccs/ajbtux/source/SCHD/schd_cycle_cleanup.c - line 341 n SCHD_CYCLE_CLEANUP - Move(s) Exist for cycle 389210 n
Run Code Online (Sandbox Code Playgroud)

我可以看到第一个代码块正在删除其他所有东西(SCHD_CYCLE_CLEANUP - Move(s)Exist for cycle 389210)并且正在使用波浪号,但第二个代码块只是用字符n替换波浪号.我还可以看到在第一个代码块中有必要在此之后进行换行(sed's/[〜] /),这就是为什么我会用\n来模拟换行符但事实并非如此.我认为我的输出结果不同是因为正则表达式的使用方式.我试图查看正则表达式并在stackoverflow上搜索它们但没有获得我正在寻找的东西.有人可以解释一下如何从代码块B中获得与代码块A相同的结果而不需要将部分代码放在第二行吗?

先感谢您

Ed *_*ton 5

这是XY问题的一个例子(http://xyproblem.info/).您正在寻求帮助来实施一些错误解决问题的方法.为什么在~给出所发布的样本输入和预期输出所需的所有内容时,将s 更改为换行符等:

$ sed -n 's/.*schdCycCleanup.* \([0-9]*\).*/\1/p' file
389210
Run Code Online (Sandbox Code Playgroud)

要么:

$ awk -F'[ ~]' '/schdCycCleanup/{print $(NF-1)}' file
389210
Run Code Online (Sandbox Code Playgroud)

如果这不是你所需要的,那么请编辑你的问题以澄清你对你想要做什么的要求(而不是你想要做什么),因为你当前的方法是错误的.