我有一个文件,其中包含尖括号中的相对路径,如下所示(example.txt):
Some content containing <../another.txt> file
然后在父目录中,文件another.txt:
another
我可以使用什么 Linux 命令行来生成example_processed.txt,将<path>
令牌替换为指定路径处文件的内容?例如,我想要一个命令来提取example.txt并生成包含以下内容的example_processed.txt :
Some content containing another file
请注意,我不关心生成的文件中是否有无关的换行符,因此以下输出也是可以接受的(这只是一个示例,任何无关的空格都是可以接受的):
Some content containing
another
file
我有一个 bash 循环,可以将文件的内容读入变量,但同样,不知道这是否有助于我执行替换:
cp example.txt example_processed.txt
grep -oP '<\K.*(?=>)' example.txt | while read -r REPL_PATH ; do
local CONTENTS=$(<"$REPL_PATH")
# TODO: How do I use this? The following is what I want to work:
# sed "s/<$REPL_PATH>/$CONTENTS/g"
echo "$REPL_PATH: $CONTENTS"
done
这是产生最接近的结果,但要求another.txt位于同一目录中:
sed -e '/<\(.*\)>/{' -e 's/<.*>//' -e 'r another.txt' -e '}' -i example.txt
以上输出:
Some content containing file
another
问题:
- 如何将替换路径指定为../another.txt?
- 如何将上述命令中的文字another.txt替换为捕获组 #1 的结果?例如,
sed -e '/<\(.*\)>/{' -e 's/<.*>//' -e 'r \1' -e '}' -i example.txt
- 如何将替换字符串移动到“包含”和“文件”之间,而不是“文件”之后?