Sed 如何用HDFS中存在的文件中的另一个文本替换文本

Sed 如何用HDFS中存在的文件中的另一个文本替换文本,sed,hdfs,Sed,Hdfs,我在UNIX文件系统中有file.txt。其内容如下: {abc}]} {pqr}]} 我想将此file.txt转换为: [ {abc}]}, {pqr}]} ] 我可以使用以下shell脚本完成此操作: sed -i 's/}]}/}]},/g' file.txt sed -i '1i [' file.txt sed -i '$ s/}]},/}]}]/g' file.txt 我的问题是,如果这个文件出现在HDFS的/test位置,会发生什么 如果我使用:sed-I's/}]}/},/g

我在UNIX文件系统中有file.txt。其内容如下:

{abc}]}
{pqr}]}
我想将此file.txt转换为:

[
{abc}]},
{pqr}]}
]
我可以使用以下shell脚本完成此操作:

sed -i 's/}]}/}]},/g' file.txt
sed -i '1i [' file.txt
sed -i '$ s/}]},/}]}]/g' file.txt
我的问题是,如果这个文件出现在HDFS的/test位置,会发生什么

如果我使用:
sed-I's/}]}/},/g'/test/file.txt

它将查看unix分区/测试,并说文件不存在

如果我使用:
sed-I's/}]}/},/g'| hadoop fs-cat/test/file.txt

它说------sed:没有输入文件,然后根据cat命令打印file.txt的内容

如果我使用hadoop fs-cat/test/file.txt | sed-I's/}]}/},/g'

它说----sed:没有输入文件 cat:无法写入输出流


那么,如何用其他字符串替换HDFS文件中的字符串?

使用
sed
HDFS
命令:

hdfs dfs -cat /test/file.txt | sed 's/$/,/g; $s/,$/\n]/; 1i [' | hadoop fs -put -f - /test/file.txt
在哪里,

hdfs dfs-cat/test/file.txt
用于获取hdfs文件内容

s/$/,/g用于在每行末尾添加逗号

$s/,$/\n]/用于删除行中的逗号并添加带括号的换行符

1i[
用于在第一行添加括号

hadoop fs-put-f-/test/file.txt
用于覆盖HDFS中的原始文件