假设您在工作日期间反复遇到bash中某些命令的以下形式的列化输出(在我的情况下,svn st
在我的Rails工作目录中执行):
? changes.patch
M app/models/superman.rb
A app/models/superwoman.rb
Run Code Online (Sandbox Code Playgroud)
为了使用命令的输出 - 在这种情况下是文件名 - 需要某种解析,以便第二列可以用作下一个命令的输入.
我一直在做的是用来awk
获取第二列,例如当我想删除所有文件(不是那个典型的用例:)时,我会这样做:
svn st | awk '{print $2}' | xargs rm
Run Code Online (Sandbox Code Playgroud)
由于我输入了很多,一个自然的问题是:在bash中有没有更短(更酷)的方法来实现这一点?
注意:我所要求的实际上是一个shell命令问题,即使我的具体示例是在我的svn工作流程上.如果您认为工作流程很愚蠢并建议另一种方法,我可能不会投票给您,但其他人可能会,因为这里的问题实际上是如何以最短的方式获得bash中的第n列命令输出.谢谢 :)
让我们说" textfile "包含以下内容:
lorem$ipsum-is9simply the.dummy text%of-printing
Run Code Online (Sandbox Code Playgroud)
并且您想要在单独的行上打印每个单词.但是,单词不仅应由空格定义,还应由所有非字母数字字符定义.所以结果应该是这样的:
lorem
ipsum
is9simply
the
dummy
text
of
printing
Run Code Online (Sandbox Code Playgroud)
如何使用Bash shell完成此操作?
一些说明:
这不是一个家庭作业问题.
只应用空格确定单词的简单情况很容易.只写:
for i in `cat textfile`; do echo $i; done;
Run Code Online (Sandbox Code Playgroud)
会做的伎俩,并返回:
lorem$ipsum-is9simply
the.dummy
text%of-printing
Run Code Online (Sandbox Code Playgroud)
对于使用非字母数字字符拆分单词我看过使用IFS环境变量的解决方案(下面的链接),但我想避免使用IFS有两个原因:1)它需要(我认为)将IFS设置为长非字母数字字符列表.2)我发现它有点难看.
以下是我发现的两个相关问答
如何在Bash中的分隔符上拆分字符串?
如何将一行划分为bash中由一个或多个空格分隔的单词?