bash:获得第n列输出的最短方法

标签 bash awk

假设在您的工作日中,您反复遇到 bash 中某个命令的以下形式的列化输出(在我的例子中是在我的 Rails 工作目录中执行 svn st):

?       changes.patch
M       app/models/superman.rb
A       app/models/superwoman.rb

为了处理命令的输出 - 在本例中为文件名 - 需要进行某种解析,以便第二列可以用作下一个命令的输入。

我一直在做的是使用 awk 获取第二列,例如当我想删除所有文件时(这不是典型的用例:),我会这样做:

svn st | awk '{print $2}' | xargs rm

由于我经常输入此内容,一个自然的问题是:在 bash 中是否有更短(因此更酷)的方法来完成此操作?

注意: 我要问的本质上是一个 shell 命令问题,尽管我的具体示例是在我的 svn 工作流程中。如果您觉得工作流程很愚蠢并提出替代方法,我可能不会投票给您,但其他人可能会,因为这里的问题实际上是如何以最短的方式在 bash 中获取第 n 列命令输出.谢谢:)

最佳答案

您可以使用 cut访问第二个字段:

cut -f2

编辑: 抱歉,没有意识到 SVN 在其输出中不使用制表符,所以这有点没用。您可以根据输出定制 cut,但它有点脆弱 - 像 cut -c 10- 这样的东西可以工作,但确切的值将取决于您的设置。

另一个选项类似于:sed 's/.\s\+//'

关于bash:获得第n列输出的最短方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7315587/

相关文章:

r - 用于更新 R Markdown 代码以使用 `$latex` 分隔符的命令行程序

bash - 读取文件名中的空格时

linux - 计算文本文件中的一致性和相关性

mysql - 如何使用 bash 将字符添加到 CSV 中每条记录的可变数量字段?

bash - 为什么 influxdb 无法启动?

linux - 如何逐行阅读并从键盘获取输入?

sed 或 awk : how to call line addresses from separate file?

bash - 如何更新 zip 存档中的单个文件

linux - Bash - 搜索所有脚本的目录

bash - 回车不会删除之前的值