我有以下代码:
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 文件。