Sed 如何用HDFS中存在的文件中的另一个文本替换文本
我在UNIX文件系统中有file.txt。其内容如下: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
{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中的原始文件