linux - shell脚本中的文本处理

标签 linux shell

如果第二行匹配“Minion did not return”,我需要处理第一行。我的文字如下:

t-dat-collectorsrv-1a.2014_12_01_11_23:
    True
t-dat-postprocessorsrv-1a.2014_04_29_10_02:
    True
t-dat-collectorsrv-1a.2014_12_03_10_15:
    Minion did not return
t-dat-collectorsrv-1a.2014_12_03_10_27:
    Minion did not return
t-dat-collectorsrv-1a.2014_12_03_10_38:
    Minion did not return

每当我收到“Minion did not return”时,我想获取第一行“t-dat-*”并想做一些处理。如何根据第二行打印的输出分隔第一行?

最佳答案

您可以使用 awk 存储前一行,并在当前行与某个模式匹配时对其进行操作:

$ awk '/Minion did not return/{print prev;prev=$0}{prev=$0}' inputFileName

t-dat-collectorsrv-1a.2014_12_03_10_15:
t-dat-collectorsrv-1a.2014_12_03_10_27:
t-dat-collectorsrv-1a.2014_12_03_10_38:

在上面的文字记录中,它只是打印出前一行,但您也可以用它做更复杂的事情:

$ awk '
    /Minion did not return/ {
        print gensub(/^[^.]*\.(....).(..).(..).(..).(..).*$/,
            "\\1-\\2-\\3 \\4:\\5", "g", prev);
        prev=$0
    }
    {
        prev=$0
    }' qq.in

2014-12-03 10:15
2014-12-03 10:27
2014-12-03 10:38

关于linux - shell脚本中的文本处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27352113/

相关文章:

linux - 使用egrep -o后如何进行egrep

c# - 如何从CMD(Shell)编译测试类和 Entity Framework Model.Designer.cs

linux - 在 linux box 上运行 nightwatch.js 测试?

linux - 为什么 Linux rpm 是特定于操作系统的

linux - 使用浏览器和 IP 而不是 DNS 访问服务器

node.js - 已安装 Node ,但未安装 NPM

bash - "cat > somefilename <<EOF"(特别是大于号和双小于号)在 shell 中有什么作用?

linux - 如何编写脚本来执行git pull?

linux - 交叉编译时避免头文件冲突

java - 如何从 java 打开 linux 终端并能够在其中执行命令?