我有一个包含数千行的文件,其内容类似于:

completedJob=job details abc
completedJob=job details def
currentJob=job details ghi
queuedJob=job details jkl
queuedJob=job details mno

我想改成这个:
completedJob=job details abc
completedJob=job details def
completedJob=job details ghi
currentJob=job details jkl
queuedJob=job details mno

在其他工作中,将currentJob更改为completedJob将nextqueuedJob更改为currentJob
我已经看到了一个类似问题的答案,它给出了一个sed和一个awk的解决方案(https://stackoverflow.com/a/8336918/257233),但我无法计算出在这个答案中,与号是如何作为第二行的,以及如何修改第二行的一部分。

最佳答案

你可以用这个,

$ cat test
completedJob=job details abc
completedJob=job details def
currentJob=job details ghi
queuedJob=job details jkl
queuedJob=job details mno

$ sed '/^currentJob/{s/^currentJob/completedJob/;n;s/^queuedJob/currentJob/}' test
completedJob=job details abc
completedJob=job details def
completedJob=job details ghi
currentJob=job details jkl
queuedJob=job details mno

说明:
/^currentJob/匹配以currentJob开头的行
s/^currentJob/completedJob/;在同一行上,用currentJob替换completedJob
n;转到下一行。
s/^queuedJob/currentJob/在下一行,将startingqueuedJob替换为currentJob

关于bash - 使用awk或sed在模式之后更改下一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37476082/

10-10 17:38