我想用下划线 ( ) 替换分支名称中的空格 ( ) 字符
_
。例如,假设我有一个sedtest文件,其中包含:
Node-path: trunk/
Node-path: trunk/src/lib 0
Node-path: trunk/src/lib 0/bla.txt
Node-path: branches/ branch0-blabla_blabla/src
Node-path: branches/ branch0-blabla_blabla
Node-path: branches/branch1 stuffthing
Node-path: branches/branch1 stuffthing/src/lib 0
Node-path: branches/branch1 stuffthing/src/lib 0/bla.txt
Node-path: branches/branch2stuffthing/src/lib 0/bl a.txt
我希望它像这样修改:
Node-path: trunk/
Node-path: trunk/src/lib 0
Node-path: trunk/src/lib 0/bla.txt
Node-path: branches/_branch0-blabla_blabla/src
Node-path: branches/_branch0-blabla_blabla
Node-path: branches/branch1_stuffthing
Node-path: branches/branch1_stuffthing/src/lib 0
Node-path: branches/branch1_stuffthing/src/lib 0/bla.txt
Node-path: branches/branch2stuffthing/src/lib 0/bl a.txt
我遇到的问题与此 SO question中描述的问题类似。但是,该问题要求替换路径中的所有空格。我只想替换分支名称中的空格。
从另一个问题,我已将sed
命令修改为:
sed '/^Node-path: branches\//s/ /_/2' < sedtest
但它也将最后一行修改为Node-path: branches/branch2stuffthing/src/lib_0/bl a.txt
,应该保持不变。我的经验sed
非常有限,我无法将“搜索区域”适当地限制在branches/
以下之间/
或之间$
,以先到者为准。我正在使用 CentOS 7。
至于我要完成的工作:我正在尝试将我们的 SVN 存储库移植到 git 上,根据SO 上的这个答案和我的个人经验,git 分支名称中不能有空格。我正在尝试按照svnbook.red-bean.com 上的建议通过 svn 转储来解决此问题。
我想我可以 grep 所有有问题的分支并手动替换字符串,但这会不那么通用,工作量更大,而且娱乐性也少得多。
我已经构建了以下
sed
命令:它看起来又大又丑,但它适用于这种情况。
请注意,它不会修复分支名称中多次出现的空格,仅修复一次(因此如果需要,我将重新运行该命令)。
附带说明一下,如果您这样做是为了修复 SVN 转储,请不要忘记以
Node-copyfrom-path:
相同的方式修复这些行。查看分支后两个斜线之间的空间
Perl lookbehind使它更简单一些,尽管我不会要求太多:
或者可能是 awk,它可以通过更改为 gsub 来处理分支名称中的多个空格: