如何在linux命令行中为echo设置变量

时间:2014-09-22 10:18:09

标签: linux shell

我想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

2 个答案:

答案 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你想要寻找点(否则你指示它寻找任何字符)