支店名の空白()文字を下線()に置き換えたいと思います
_
。たとえば、sedテストファイルには以下が含まれます。
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
私は説明したのと同様の問題に直面しました。この問題。ただし、この質問ではパスのすべてのスペースを置き換える必要があります。支店名の空白だけを変更したいです。
他の質問でsed
コマンドを次のように修正しました。
sed '/^Node-path: branches\//s/ /_/2' < sedtest
ただし、これは変更されていないままにする必要がある最後の行も変更しますNode-path: branches/branch2stuffthing/src/lib_0/bl a.txt
。私の経験は非常に限られており、「検索領域」を前後に来ることに適切に制限するsed
ことはできません。 CentOS 7を使用しています。branches/
/
$
私が達成しようとしている目標は次のとおりです。 SVNリポジトリをgitリポジトリに移植しようとしています。SOへのこの答え私の個人的な経験によると、gitブランチ名にスペースを使用することはできません。提案されているように、svn dumpを介してこの問題を解決しようとしています。svnbook.red-bean.comから。
問題のあるブランチをすべて把握し、文字列を手動で置き換えることができると思います。しかし、そうすると多目的が落ち、より多くの作業が必要になります。はるかに面白くない。
答え1
次のsed
コマンドを作成しました。
$ sed '/^Node-path: branches\//s/Node-path: branches\/\([-A-Za-z0-9]*\) \
\([-A-Za-z0-9]*\)/Node-path: branches\/\1_\2/' < sedtest
大きくて見苦しく見えますが、この状況には効果があります。
ブランチ名に複数回表示されるスペースを変更するのではなく、一度だけ変更します(したがって、必要に応じてコマンドを再実行します)。
参考までに、SVNダンプを修正するためにこれを行う場合は、この行をNode-copyfrom-path:
同じ方法で変更することを忘れないでください。
答え2
sed '/^Node-path: branches\/ /s/ /_/2' < sedtest
分岐の後ろの2つのスラッシュ間のスペースを確認してください。
答え3
パールトレースバック簡単にするにはあまり必要はありませんが、次のようになります。
perl -ple 's:^Node-path: branches/\K([^ /]*) :$1_:' <file
または、awkをgsubに変更して、ブランチ名の複数のスペースを処理できます。
awk -F/ -vOFS=/ '$1=="Node-path: branches"{sub(/ /,"_",$2)} 1' <file