Unix命令剥离部分行

时间:2012-01-26 23:32:57

标签: svn shell unix command-line grep

我正在使用命令行SVN。来自Windows上的TortoiseSVN,每当我尝试选择一个特定的文件来恢复,差异,提交等时,我发现它非常繁琐,当路径非常长时,这样:

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

如果我想在这个文件上做差异,我必须输入所有这些:

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

所以,我试着这样做:

svn st | grep Foo

但它返回:

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

现在,如何剥离“M”部分,这样我才能获得文件路径?

4 个答案:

答案 0 :(得分:1)

svn st | grep Foo | sed 's/M *//'

答案 1 :(得分:1)

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

答案 2 :(得分:1)

如果'svn st'总是返回(不需要的)第一列,然后返回路径,请尝试:

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

答案 3 :(得分: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>

根据目录中的文件,您可能需要输入更多或更少的内容。