如何在终端中从grep中剥离列

时间:2016-10-18 17:04:17

标签: linux grep

当我运行命令时 history | grep "apt-get install" 它返回以下文本

 243  sudo apt-get install ntfs-3g
  280  sudo apt-get install weavedconnectd
  329  sudo apt-get install foremost
  336  sudo apt-get install nbtstat -y
  357  sudo apt-get install dnsmasq
  372  sudo apt-get install debian-zfs
  373  sudo apt-get install raspbian-zfs
  374  sudo apt-get install zfs
  434  sudo apt-get install hfsplus hfsutils hfsprogs -y
  447  sudo apt-get install hfsprogs
  703  sudo apt-get install xrdp
  733  sudo apt-get install tightvncserver 
 1126  sudo apt-get install lcdproc
 1151  sudo apt-get install webalizer
 1152  sudo apt-get install webalizer -yf
 1213  sudo apt-get install python-pip
 1214  sudo apt-get install python-dev

虽然我只想从sudo上山包名。即数字的条带。以便将来如果我必须安装这些软件包,我可以直接将文本从保存的文件粘贴到shell中。

2 个答案:

答案 0 :(得分:0)

你可以使用sed和cut的混合来去除空白并选出你想要的字段。

history | grep "apt-get install" | sed 's/^ *//' | cut -d' ' -f3-

sed命令将从历史输出中拉出前导空格,cut将把输出拆分为列,允许您只选择命令。

答案 1 :(得分:0)

您可以将输出传输到sed并去除不需要的部分,如下所示:

history | grep "apt-get install" | sed 's/^\s*[[:digit:]]\+\s*//'

sed正则表达式将匹配:

^:在每行的开头
\s*:任意数量的空格字符,后跟
[[:digit:]]\+:一个或多个数字,后跟
\s*任意数量的空格(渴望)