从历史shell命令替换

时间:2010-11-18 12:02:42

标签: bash shell

我的历史记录中有这样的命令(Linux bash shell):

1119 for dir in `ls -d MyMod.*`; \
    do echo $dir;  \
svn copy --parents $dir $REPO/tags/MyMod_20101115/$dir -m"MyMod tag for 20101115"; \
done

其中1119是命令编号。

(请注意,该命令实际上全部在一行中,并且不包含任何\字符。我只是将它们放入以使其适合页面)

您是否可以使用单行从20101115修改上述内容到20101118(代表今天日期的标记)。显然我们可以创建一个脚本来执行此操作。

这不是关于SVN的问题。上面的示例是一个SVN示例,但问题的目的是知道如何进行替换,特别是考虑到它在历史记录中并使用for。我们尝试使用与sed混合的echo!1119并且没有得到理想的结果。

3 个答案:

答案 0 :(得分:2)

!1119:gs/20101115/20101118

请参阅bash手册中的“历史记录扩展”

答案 1 :(得分:1)

tail +1119 ~/.bash_history | head -1 | sed -e "s/20101115/20101118/g"

history | tail +1119 | head -1 | awk -F" " '{print $3 $4}' | sed -e "s/$OLD/$NEW/g"

答案 2 :(得分:1)

fc -s 20101115=20101118 1119