假设我有一个程序blackbox
和一个包含以下内容的文件:
in this file
this line contains =TAG=
so does =TAG= this one
as =TAG= does this other line
this line does not
nor does this line
=TAG= here again
gone again
我如何blackbox
仅在包含的行上运行=TAG=
?
注 1:一种方法是使用while read
循环,但这被认为是不好的做法。那么,什么是规范的、正确的方法来做到这一点(如果有的话)?
注 2:当然,如果我只是编辑文本,使用AWK
或 的解决方案sed
是合适的——但blackbox
可能会产生预期的副作用。这个问题适用于我需要执行另一个进程的情况。
注 3:您可能会问,如果blackbox
是类似nl
或的情况,会发生什么情况sort
— — 在多行上同时运行它与在每行上运行一个新进程的结果不同。在这种情况下,我希望能够通过以下三种方式中的每一种来做到这一点:
按块:
=TAG=
用该块上的结果替换包含的每个连续行的块blackbox
。预期输出为
blackbox
=nl
:in this file 1 this line contains =TAG= 2 so does =TAG= this one 3 as =TAG= does this other line this line does not nor does this line 1 =TAG= here again gone again
逐行:将包含的每一行替换为该行
=TAG=
的结果。blackbox
预期输出为
blackbox
=nl
:in this file 1 this line contains =TAG= 1 so does =TAG= this one 1 as =TAG= does this other line this line does not nor does this line 1 =TAG= here again gone again
连续:将包含的所有行发送
=TAG=
给一个进程,并在接收下一个块blackbox
之前用新打印的行替换每个块。blackbox
预期输出为
blackbox
=nl
:in this file 1 this line contains =TAG= 2 so does =TAG= this one 3 as =TAG= does this other line this line does not nor does this line 4 =TAG= here again gone again
(如果我们使用
sort
,所有匹配的行最终都会排在最后一个匹配的块中,因为它们直到最后才会被打印。)
我在这里没有发现任何关于一般问题的问题,但这些都是该问题的特殊情况:
- 如何编写带有反斜杠的脚本前缀括号(逐行)
- 根据字符串的存在编辑文件(逐行)
- 有条件地将文件 1 中的行替换为文件 2 中的相应行(逐行)
- 读取 bash 脚本时可以加快速度吗?(逐行)
- 使用 sed逐行将字符串替换为文件内容
- 使用 sed 在某些条件下用空格更改换行符(块方式)
- 对仅匹配第一行的行块进行排序(按块)
- 删除与模式匹配的行,以及其后与其他模式匹配的任何行(按块)
- 按顺序(连续)用另一个文件中的行替换与模式匹配的行
- 类似于“粘贴”,但在分隔符后垂直对齐?(连续)
- 使用文本文件将多个命令行参数传递给可执行文件(连续)
- 从与模式匹配的每一行中删除第 N 行(连续)