【发布时间】:2018-10-31 07:22:24
【问题描述】:
我想从一个文件中插入一系列行,比如210,221r 在其他文件中第一次出现模式之前。
由于我显然不是 GNU sed 专家,所以我不知道该怎么做。
我试过了
sed '0,/pattern/{210,221r file
}' bunch_of_files
但显然 file 是从第 210 行读取到 EOF。
【问题讨论】:
标签: command-line sed text-processing
我想从一个文件中插入一系列行,比如210,221r 在其他文件中第一次出现模式之前。
由于我显然不是 GNU sed 专家,所以我不知道该怎么做。
我试过了
sed '0,/pattern/{210,221r file
}' bunch_of_files
但显然 file 是从第 210 行读取到 EOF。
【问题讨论】:
标签: command-line sed text-processing
试试这个:
sed -r 's/(FIND_ME)/PUT_BEFORE\1/' test.text
-renablesextendend 正则表达式\1 将捕获的文本放入替换中。关于你的第二个问题:你可以从这样的文件中读取替换*:
sed -r 's/(FIND_ME)/`cat REPLACEMENT.TXT`\1/' test.text
如果事先将REPLACEMENT.TXT 中的特殊字符替换为sed,那么你就是金子。
*= 这取决于您的终端模拟器。它适用于 bash。
【讨论】:
cat 或sed 的其他实例的额外费用。我将在下面发布它,但是它还没有解决读取文件的特定行的问题。
在https://stackoverflow.com/a/11246712/4328188CodeGnome 中给出了一些“sed 黑魔法”:
为了在模式之前插入文本,您需要在读入文件之前将模式空间交换到保持空间。例如:
sed '/pattern/ { h r file g N }' in
但是,要从file 中读取特定 行,可能必须使用类似于 dummy 答案的两次调用解决方案。不过,如果可能的话,我很乐意知道一通电话解决方案。
【讨论】: