使用 tee 将字符串附加到文件中,并将其用作另一个文件中的模式的替换

使用 tee 将字符串附加到文件中,并将其用作另一个文件中的模式的替换

我有以下代码:

cat file | grep example | sed 's/http/https/' >> report.txt

该命令的输出:

https://example.com/page/index.html

这将使用 HTTPS 添加一个到该文件的链接。但是,我希望相同的输出也替换第二个文件中的“URL”。

第二个文件的内容:

TEXT TEXT
TEXT

URL

TEXT TEXT

第二个文件中所需的更改:

TEXT TEXT
TEXT

https://example.com/page/index.html

TEXT TEXT

这可能吗?

PS:我无法再次重复该命令,因为它实际上不是一个简单的猫,而是启动该命令的上传过程。

答案1

根据记录,您不需要cat并且可以grep单独sed做到这一点:

sed '/URL/!d;s/http/&s/'

无论如何,假设您运行一系列命令来生成单行输出,您可以执行以下操作:

... | tee -a report.txt | sed 's|[\&/]|\\&|g;s|.*|s/URL/&/g|' | sed -f- -i infile.json

这会将输出附加到,report.txt但也会通过管道sed将其转换为sed命令,然后将其通过管道传送到另一个命令sed,该命令将.json就地编辑文件。

答案2

这是对一个简短问题的简短回答:

cat file | grep URL | sed 's/http/https/' | tee -a report.txt | while read $LINE; do
    sed --in-place -e "s·URL·$LINE·" thejsonfile.json
done

确保将脚本·中的所有三个字符替换sed为 中未包含的某个字符$LINE,或将其保留为·(中间点)。

编辑:我刚刚从另一个问题中了解到,while read由于性能和其他原因,管道进入循环被认为是不好的做法。这会让你完成你的工作,所以我把它留在这里。

答案3

sed -n '/example/s/http/&s/p' file | tee -a report.txt |\
sed -e 'G;s/$/./;G;s/$/wq/;h;s|.*|/URL/c|;G' | ed -s - json_file

我们ed根据第一个输出构建代码并使用它来编辑 json 文件。

相关内容