我正在尝试在第一次出现的 x 次将文本添加到行尾。我知道如何在全球范围内和 n 次发生。我不知道如何在第 n 次出现时做到这一点。一个示例是包含以下内容的 text.txt 文件:
This is a test
junk
This is a test
More junk
This is a test
This is a test
This is a test
而且,我想添加一个'。在前 3 次“这是一个测试”的结尾出现。我想要得到的输出是:
This is a test.
junk
This is a test.
More junk
This is a test.
This is a test
This is a test
This.*test
是正确的正则表达式。星号表示“前一个字符的 0 倍或更多倍”,因此This*test
不会匹配您的任何行。现在,Sed 不擅长算术。对于优雅的东西,我建议使用 Awk:
我认为
c
,作为 awk 中任何未设置的变量,我认为它被视为零就足够了,但如果您需要进一步澄清,请告诉我。在找到所有 3 个匹配项后避免进行正则表达式匹配的另一个变体:
具体来说,
sed
您可以执行以下操作:我们跟踪
.
要附加的 s 的数量作为.
保持空间中相应的 s 数量。不言而喻
sed
,这种任务不太适合。如果想要的原因sed
是为了-i
在一些实现上找到就地编辑的扩展(借用自perl
),请注意 GNU 实现awk
也-i inplace
可以使用 ,或者您可以使用真实的东西:如果您想
.
在每次出现之后添加一个,This is a test
而不是所有包含至少一次出现的行This is a test
,perl
这也是最好的选择:我们
perl
可以如图所示大象也可以跳舞,虽然步骤很简单。
GNU sed
在其扩展的正则表达式模式下使用写入,-E
我们可以将计数存储为保持中的换行数。