Shell 在ksh脚本中重命名文件

Shell 在ksh脚本中重命名文件,shell,awk,Shell,Awk,我有一个文件,即: xpress_railway_20140519.xml 现在我需要在输出文件名中插入一个唯一的id。例如,我现在的输出应该是: xpress_railway_1000(唯一id)_20140519.xml 我应该如何使用ksh shell脚本来实现这一点?此唯一id存在于一个名为xpress\u uni\u fcdm.parm的文件中,该文件是一个参数文件,唯一id存在于该文件的第5行。我尝试了awk和grep,但我的输出不确定。您能帮忙吗?以下内容适用于ksh和任何POSI

我有一个文件,即:

xpress_railway_20140519.xml

现在我需要在输出文件名中插入一个唯一的id。例如,我现在的输出应该是:

xpress_railway_1000(唯一id)_20140519.xml


我应该如何使用ksh shell脚本来实现这一点?此唯一id存在于一个名为
xpress\u uni\u fcdm.parm
的文件中,该文件是一个参数文件,唯一id存在于该文件的第5行。我尝试了
awk
grep
,但我的输出不确定。您能帮忙吗?

以下内容适用于ksh和任何POSIX sh

OLD=xpress_railway_20140519.xml
UID=$(awk 'NR == 5 { print; exit 0 }' xpress_uni_fcdm.parm)
NEW=$(printf '%s' "$OLD" | sed -e "s/_[[:digit:]]\+.xml$/_${UID}&/")
mv "$OLD" "$NEW"
您可以使用head-n5 | tail-n1作为UID,但我认为您会发现AWK语句比两个命令的管道更有效;而且,事实上,它只是看起来更清楚的意图。(使用SED也可以,但更隐蔽——而且,AWK语句可以最容易地扩展以过滤掉任何碎屑。)

通过以下方式进行测试:

$ ksh --version
  version         sh (AT&T Research) 93u+ 2012-08-01

我不明白。您有一个要更改的文件名吗?只需重命名它。@ElliottFrisch或
tail-n+5 | head-n1
:-)@ooga:为什么一个命令可以同时执行两个命令<代码>sed-n 5p执行需要的操作;
sed-e1,4d-e5q也是如此。是否需要使用新值(例如,旧的唯一ID加上一个)更新参数文件?您的意思是输出文件名是
xpress\u railway\u 1000\u 20140519.xml
,还是文件名中确实出现了
(唯一id)
xpress\u铁路
是固定名称的一部分吗?大概名称的日期部分是任意的。@JonathanLeffler我想第二个
sed
示例是最有效的。我很惊讶,
head
在打印给定的行数之前没有跳过给定行数的方法。