sed命令用于修改文件名

时间:2015-01-20 16:37:16

标签: bash sed

我可以使用sed命令来处理一些简单的事情,但我有一个问题,对我来说,找到我自己的解决方案很复杂,所以如果有人可以帮助我,那将是一个很大的帮助。

示例:如何修改以下文件?

orig_file_name = OBIEE_S99_TT_PLV_BI0026.rpd
target_file_name = OBIEE_S99_TT_PLV.rpd

所以在我的bash脚本中,我会做以下。 1.检查目录中的最新文件。 2.拾取该文件并修改其名称,与上述类似。

情况:我不知道文件名是什么,但我知道模式的一部分,文件名总是以" something_is_name_xxxx.rpd" 所以我想将文件名修改为" something_is_name.rpd"

5 个答案:

答案 0 :(得分:1)

我会做这样的事情,但我不怀疑有更好的解决方案。

for f in $(ls -1t OBIEE_S99_TT_PLV* | head -1)
do
    mv $f $(echo $f | sed 's/_BI[0-9]*//g')
done

答案 1 :(得分:1)

如果您知道文件名遵循您描述的模式,则可以使用

target_file_name="${orig_file_name%_*}.${orig_file_name##*.}"

此处${orig_file_name%_*}是前一个_之前的文件名的一部分,${orig_file_name##*.}是最后一个.之后的部分。总是rpd始终考虑到它,所以

target_file_name="${orig_file_name%_*}.rpd"

也适用于你的情况。

这些扩展是特定于bash的。它们在“参数扩展”下的bash手册页中有更详细的描述。

答案 2 :(得分:1)

我会在这个正则表达式中使用sed:

$ echo OBIEE_S99_TT_PLV_BI0026.rpd | sed "s/^\(.*\)\(_[a-zA-Z0-9]\+\)\(\.rpd\)$/\1\3/g"
OBIEE_S99_TT_PLV.rpd
  1. 这假设您的文件扩展名将始终为rpd,但可以 容易改变
  2. 您可能不需要在脚本中转义括号

答案 3 :(得分:0)

man rename 

可以帮助,没有sed,但perl。

答案 4 :(得分:0)

你知道你有多少张下划线吗? 从最后一个下划线开始更改字符串:

echo OBIEE_S99_TT_PLV_BI0026.rpd | sed 's/_[a-zA-Z0-9]*.rpd$/.rpd/'

其他答案可能会更好,具体取决于您所知道的确切限制。 当您知道固定数量的下划线时,您甚至可以使用剪切:

echo $(echo OBIEE_S99_TT_PLV_BI0026.rpd | cut -d_ -f1-4).rpd