【发布时间】:2016-09-24 23:50:56
【问题描述】:
我有文件名列表 file1,file2,file3
我想在脚本中传递这些文件名并删除特殊字符
我准备了 sed 命令来删除特殊字符
sed -i -e 's/^B/,/g' /home/data/nfiledata/
hdfs dfs -put -f /home/data/nfiledata/* user/sai/table1/nfiledata/
gzip /home/data/nfiledata/*
sed -i -e 's/^B/,/g' /home/data/marginfile/
hdfs dfs -put -f /home/data/marginfile/* user/sai/table2/marginfile/
gzip /home/data/marginfile/*
sed -i -e 's/^B/,/g' /home/data/calldata/
hdfs dfs -put -f /home/data/calldata/* user/sai/table3/calldata/
gzip /home/data/calldata/*
我的问题是,我可以在一个命令中编写并使用 Shell 脚本循环每个文件的进程,而不是多次编写相同的命令
nfile = (nfiledata,margindata, calldata)
while IFS= read -r nfile
do
sed -i -e 's//,/g' /home/data/$nfile/
hdfs dfs -put -f /home/data/$nfile/* user/sai/table$/$nfile/
gzip /home/data/$nfile/*
done < "home/data/$nfile"
【问题讨论】:
-
你希望
sed 's//,/g'做什么? -
files=( file1 file2 file3 )是正确的数组赋值语法。=s 周围不能有空格,不能有逗号。 -
我强烈建议您通过shellcheck.net 运行您的代码,并在此处提问之前修复它找到的所有内容。
-
sed通常对文件而不是目录进行操作。在代码sed -i -e 's/^B/,/g' /home/data/file1/中,你期望sed做什么?