我想grep目录中的所有文件名,修改名称,并通过echo命令打印修改后的名称:
file names:
merged.reversed.m444.txt.gz
merged.reversed.m445.txt.gz
...
modified should be:
m444
m445
for i in *;
ModifiedName = sed 's/merged.reversed.//g' $i | sed 's//.txt.gz/g'
do echo "modified name of file $i is $ModifiedName"; done
答案 0 :(得分:2)
要从sed
输出创建变量,请按以下方式使用:
for i in *; do
ModifiedName=`echo "$i" | sed -e 's/merged\.reversed\.//' -e 's/\.txt\.gz//'`
echo "modified name of file $i is $ModifiedName"
mv "$i" "$ModifiedName"
done
在BASH下你可以这样做:
ModifiedName=$(sed -e 's/merged\.reversed\.//' -e 's/\.txt\.gz//' <<< "$i")
答案 1 :(得分:1)
我认为你的剧本中有一些错误。
更正确的版本是这个:
for i in *;
do
ModifiedName = `ls $i | sed -e s/merged\.reversed\.//g | sed -e s/\.txt\.gz//g`;
echo "modified name of file " $i " is " $ModifiedName;
mv $i $ModifiedName;
done
注意: 要将命令结果的值赋给变量,请将命令放入反引号(或$()) 的。字符是一个特殊的字符,所以你需要反斜杠它说sed你想要寻找点(否则你指示它寻找任何字符)