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

ear*_*arl 9 sed hdfs

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

{abc}]}
{pqr}]}
Run Code Online (Sandbox Code Playgroud)

我想将此file.txt转换为:

[
{abc}]},
{pqr}]}
]
Run Code Online (Sandbox Code Playgroud)

我可以使用下面的shell脚本来做到这一点:

sed -i 's/}]}/}]},/g' file.txt
sed -i '1i [' file.txt
sed -i '$ s/}]},/}]}]/g' file.txt
Run Code Online (Sandbox Code Playgroud)

我的问题是如果这个文件存在于/测试位置的HDFS上.

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

它会查看unix partition/test并说文件不存在.

如果我使用: 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文件中的字符串呢?

dae*_*n12 9

使用sedhdfs命令:

hdfs dfs -cat /test/file.txt | sed 's/$/,/g; $s/,$/\n]/; 1i [' | hadoop fs -put -f - /test/file.txt
Run Code Online (Sandbox Code Playgroud)

哪里,

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

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

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

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

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