我正在尝试根据特定条件替换文本文件中的文本。
例如,如果我有三个文本文件,其中outer.txt包含:
Blah Blah Blah
INCLUDE inner1.txt
Etcetera Etcetera
INCLUDE inner2.txt
end of file
包含以下内容的inner1.txt:
contents of inner1
and inner2.txt包含:
contents of inner2
在替换结束时,outer.txt文件看起来像:
Blah Blah Blah
contents of inner1
Etcetera Etcetera
contents of inner2
end of file
整个模式将是单词" INCLUDE"的每个实例,用文件内容替换整行,其文件名紧跟在" INCLUDE"的实例之后,在一种情况下,它将是inner1.txt,在第二种情况下将是inner2.txt。
更简单地说,gawk是否有可能根据要在外部文本文件中替换的内容来确定将哪个文本文件嵌入到外部文本文件中?
答案 0 :(得分:1)
如果您在编辑文件(“ chmod + x编辑文件”)上设置了+ x位,则可以执行以下操作:
g/include/s//cat/\
.w\
d\
r !%
w
q
说明:
g/include/s//cat/\
启动全局命令。
.w\
(从全局上下文中),仅用当前行覆盖编辑文件(有效地是:“ cat included_file”,在其中用有问题的文件名替换了include_file)。
d\
(从全局上下文中),从缓冲区中删除当前行。 (即再次删除“ include included_file”,included_file代表该文件)。
r !%
(从全局上下文中),从执行默认文件(我们正在编辑的文件,上面被'cat ...'覆盖)读取输出。
w
(最后,在全局范围之外)。将缓冲区写回(保存)到编辑文件。
q
退出。
答案 1 :(得分:0)
使用GNU awk:
awk --load readfile '{if ($1=="INCLUDE") {printf readfile($2)} else print}' outer.txt
答案 2 :(得分:0)
使用gnu sed
sed -E 's/( *)INCLUDE(.*)/printf "%s" "\1";cat \2/e' outer.txt