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

标签 linux shell grep csh

例如我有一个包含内容的csh脚本

mkdir tmp
grep string1 file2
rm *
grep string2 ~/file2
setenv a 8
rm *

我只想在最后一次出现 grep 之前执行那些命令,这意味着 setenv 和最后一个 rm 不会运行,但会运行之前的所有命令。有谁知道使用另一个 shell 脚本处理这个脚本的方法? c shell 是首选。提前致谢。

最佳答案

我终于想出了一个方法来做到这一点。 由于我的机器只支持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 循环简单地使用一个计数器来查看我们是否到达命令。

关于linux - 如何在 linux 中最后一次出现特定命令之前运行所有命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37729690/

相关文章:

c++ - C++ (Linux) 中的字符串连接

c# - 在 Linux 嵌入式单声道程序中,数组数据未正确编码为从 c# 到 c 的结构

linux - 如何提取 app.inventory.id 命令行参数的值?

linux - 如何从纯文本中 grep 键值存储中的值

regex - Grep 没有捕捉到整个模式

linux - grep 不作为正则表达式

linux - 无法连接到containerd : failed to dial

linux - Bash 在使用 cat 找不到参数时打印帮助消息

regex - tcsh:如何更改多个文件的文件扩展名?

linux - 我正在尝试更改文件名,但脚本给了我错误