历史和切割命令:获取第二个字段

时间:2014-10-12 19:02:16

标签: linux bash shell cut

我正在尝试从历史命令中获取命令。

ubuntu@ip-172-31-13-192:~/redacted$ history
 1  ls
 2  sudo apt-get install git -y
 3  git clone https://redacted@bitbucket.org/redacted/redacted.git
 4  ls
 5  cd redacted

ubuntu@ip-172-31-13-192:~/redacted$ history | cut -d ' ' -f 2

没有输出。怎么了?

3 个答案:

答案 0 :(得分:2)

每行的开头也有空格,因此第2列很可能只是另一个空格。由于历史记录的格式已修复,因此您可以将cut设置为字符数,例如:

[mureinik@computer /]$ history | cut -c8-

答案 1 :(得分:0)

通过sed,

history | sed 's/^ *[^ ]* *//'

它会删除所有前导空格以及数字。

答案 2 :(得分:0)

这是因为cut获取了一个空格作为字段分隔符,将每个空格定义为不同的字段。

所以每当你有这样的历史:

1  ls
2  sudo apt-get install git -y
3  git clone https://redacted@bitbucket.org/redacted/redacted.git
4  ls
5  cd redacted
 ^
 what you get

当您执行cut -d' ' -f2时,您会在每个数字后面获得空格。

你怎么解决?

tr挤压空格:

history | tr -s ' ' | cut -d' ' -f2

使用awk打印第二个字段。对于awk,许多字段不计,因此以下内容将始终打印第二个文本块:

history | awk '{print $2}'