如何在linux中最后一次出现特定命令之前运行所有命令
例如,我有一个包含内容的csh脚本如何在linux中最后一次出现特定命令之前运行所有命令,linux,shell,grep,csh,Linux,Shell,Grep,Csh,例如,我有一个包含内容的csh脚本 mkdir tmp grep string1 file2 rm * grep string2 ~/file2 setenv a 8 rm * 我只想在最后一次出现grep之前执行这些命令,这意味着setenv和最后一个rm将不会运行,但之前的所有命令都会运行。有人知道使用另一个shell脚本处理此脚本的方法吗?最好是c型外壳。提前谢谢。我终于想出了一个办法。 因为我的机器只支持c shell,所以我的脚本在c shell中 #!/bin/csh set l
mkdir tmp
grep string1 file2
rm *
grep string2 ~/file2
setenv a 8
rm *
我只想在最后一次出现grep之前执行这些命令,这意味着setenv和最后一个rm将不会运行,但之前的所有命令都会运行。有人知道使用另一个shell脚本处理此脚本的方法吗?最好是c型外壳。提前谢谢。我终于想出了一个办法。 因为我的机器只支持c shell,所以我的脚本在c shell中
#!/bin/csh
set line_num = "`grep -n 'grep' filename | tail -1 | grep -o '^[0-9]\+'`"
@i = 0
foreach command ("`cat filename`")
@i += 1
$command
if($i == $line_num) then
break
endif
end
第一行找出最后一次出现的grep的行号
然后foreach循环只是使用一个计数器来查看我们是否到达该命令。我最终找到了一种方法。 因为我的机器只支持c shell,所以我的脚本在c shell中
#!/bin/csh
set line_num = "`grep -n 'grep' filename | tail -1 | grep -o '^[0-9]\+'`"
@i = 0
foreach command ("`cat filename`")
@i += 1
$command
if($i == $line_num) then
break
endif
end
第一行找出最后一次出现的grep的行号
然后foreach循环只使用一个计数器来查看我们是否到达命令。我对您的问题不是很清楚,请重写它。cat | head-n-2将打印所有内容,但最后2行grep-A1 grep也会打印。在这种情况下,您的问题对我来说不是很清楚,请重写它。cat | head-n-2将打印除最后两行之外的所有行。在本例中,grep-A1 grep也会这样做。