2012-01-26 62 views
2

我正在使用命令行SVN。在TortoiseSVN即將在Windows,我發現它非常乏味每當我試圖選擇一個特定的文件恢復,DIFF,承諾等,當路徑很長這樣的:Unix命令去掉部分行

src/com/company/stuff/platform/appname/subpackage/subsubpackage/Foo.java 

如果我想要做的在這個文件中的差異,我必須鍵入這一切:

svn diff src/com/company/stuff/platform/appname/subpackage/subsubpackage/Foo.java 

所以,我嘗試到grep,通過這樣做:

svn st | grep Foo 

但它返回:

M  src/com/company/stuff/platform/appname/subpackage/subsubpackage/Foo.java 

現在,我該如何去掉「M」部分,這樣我才能得到文件路徑?

回答

1

爲此,我會使用awk

svn st | awk '/Foo/ { print $2 ; }' 

awk需要腳本匹配指令和在匹配的行上執行代碼塊。這與其中的Foo行匹配並打印第二個字段。 (使用默認的FS字段分隔符,它應該分隔爲製表符和空格。)

您還應該查看shell的文件名完成功能;大多數較新的shell包含完成部分類型文件名的功能。爲了您的長期例如:

src/com/company/stuff/platform/appname/subpackage/subsubpackage/Foo.java 

我可能會喜歡這類型的:

src/com/com<tab>/stuff/pla<tab>/appn<tab>/subp<tab>/subsub<tab>/Foo<tab> 

您可能需要輸入或多或少取決於在你的目錄中哪些文件。

+0

我做了標籤,這也很乏味。 type-tab-slash-type-tab-slash -...你的解決方案似乎是最優雅的。沒有grep。 – atedja 2012-01-26 23:59:20

1
svn st | grep Foo | sed 's/M *//' 
1
svn st | grep Foo | sed 's/^[A-Z]\s*//' 
+0

玩過sed之後,我想出了sed的/。 * //''這也適用於未被取消的文件('?')。 – atedja 2012-01-26 23:50:33

+0

@alnite不要忘記把'^'字符告訴'sed',只在行的開頭找到它。 – 2012-01-26 23:51:50

1

如果「SVN ST公司總是返回(不需要的)第一列,然後路徑,試試這個:

svn st | grep Foo | awk '{print $2}' 
+0

這看起來像更清潔的方式。 – atedja 2012-01-26 23:52:42