Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在linux中最后一次出现特定命令之前运行所有命令_Linux_Shell_Grep_Csh - Fatal编程技术网

如何在linux中最后一次出现特定命令之前运行所有命令

如何在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

例如,我有一个包含内容的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 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也会这样做。