Linux 最后如何获得long命令的输入
是否可以在命令末尾为一个很长的命令提供输入?下面的例子将更清楚地解释我的问题 目前,在进行grepping时,我必须执行以下操作:Linux 最后如何获得long命令的输入,linux,unix,awk,grep,command,Linux,Unix,Awk,Grep,Command,是否可以在命令末尾为一个很长的命令提供输入?下面的例子将更清楚地解释我的问题 目前,在进行grepping时,我必须执行以下操作: zgrep -i "A VERY LONG TEXT" file |awk '{print $1}' 每次我都必须将光标移回一个很长的文本来更改模式。我想以这样一种方式更改命令,即在命令末尾出现一个很长的文本,以便我可以快速更改它 command1 |command2 |some_magic "A VERY LONG TEXT" 我知道我可以通过做CAT和g
zgrep -i "A VERY LONG TEXT" file |awk '{print $1}'
每次我都必须将光标移回一个很长的文本来更改模式。我想以这样一种方式更改命令,即在命令末尾出现一个很长的文本,以便我可以快速更改它
command1 |command2 |some_magic "A VERY LONG TEXT"
我知道我可以通过做CAT和grepping来达到这个效果,我想知道是否有其他方法可以做到这一点。可能类似于将其分配给临时变量
例2:
我需要在我的会话文件中获得所有命令及其输出的实时标记。因此我必须使用下面的命令。但在执行任何命令之前,我必须移动光标直到解除缓冲并更改命令。是否有任何方法可以更改下面的命令,以便在行尾输入命令
/yumm 194>unbuffer ls -lrt | awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0; }'
2014-10-01 10:38:19 total 0
2014-10-01 10:38:19 -rw-rw-r-- 1 user bcam 0 Oct 1 10:37 1
2014-10-01 10:38:19 -rw-rw-r-- 1 user bcam 0 Oct 1 10:38 test1
2014-10-01 10:38:19 -rw-rw-r-- 1 user bcam 0 Oct 1 10:38 test2
2014-10-01 10:38:19 -rw-rw-r-- 1 user bcam 0 Oct 1 10:38 test3
2014-10-01 10:38:19 -rw-rw-r-- 1 user bcam 0 Oct 1 10:38 test4
yumm 195>
简而言之,我需要一些命令来获取我执行的所有命令及其输出的时间戳 如果您只是将此文本设置为变量,会怎么样
mystring="A VERY LONG TEXT"
zgrep -i "$mystring" file | awk '{print $1}'
^ ^
note you need double quotes to make it work
根据您的编辑,您还可以执行以下操作:
awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0; }' <<< "$(unbuffer ls -ltr)"
^^^^^^^^^^^^^^^^^^^^^^^^^
编辑和重新提交命令时,请使用: Ctrl-A可将光标快速移回行首 Ctrl-E快速移动到行的末尾 Alt-F向前移动一个单词 Alt-B向后移动一个单词
或者使用fc命令打开编辑器中的最后一个命令,并允许您进行编辑-比如使用vi命令,然后在保存它时,它会重新提交以供执行。这些快捷键可能会对您有所帮助
Ctrl-a: move to beginning of line
Ctrl-e: move to end of line
Ctrl-b: move to previous character
Ctrl-f: move to next character
Ctrl-p: previous command (same as "UP" key in bash history)
Ctrl-n: next command (same as "DOWN" key in bash history)
Ctrl-h: Delete backward character
Ctrl-d: Delete current cursored character
Ctrl-k: Delete characters after cursor
如果您了解Emacs编辑器,就可以轻松地创建图像。
这些快捷键与emacs相同。您可以在~/.bash\u配置文件中定义函数: 并按以下方式使用:
some_magic "A VERY LONG TEXT"
some_other_magic "ls -lrt"
对于第二个示例,只要命令输出通过管道传输,它就会被管道缓冲。因此,在管道另一侧获取的时间戳是错误的。无论如何,如果您不介意使用错误的时间戳,您可以使用此函数:
some_other_magic() {
$1 | awk '{print strftime("%Y-%m-%d %H:%M:%S"), $0}'
}
并按以下方式使用:
some_magic "A VERY LONG TEXT"
some_other_magic "ls -lrt"
请参见示例2,我试图清楚地表达我的疑问。很抱歉没有清楚地提到我的期望。您想更改什么?就在烟斗前?然后,awk“{print strftime%Y-%m-%d%H:%m:%S,$0;}”您了解我在寻找什么,我尝试了您的建议,但它在我的服务器上不起作用?我做错什么了吗?用户>awk'{打印strftime%Y-%m-%d%H:%m:%S,$0;}'@user2809888奇怪,它对我来说工作正常。您使用的是普通bash还是其他什么?此外,请确保您完全按照原样复制答案。也许你也可以试着用awk'{print strftime%Y-%m-%d%H:%m:%S,$0;}'@user2809888不知道该说什么,我不知道这里出了什么问题。我给了两个可能在本地工作的答案,我不知道为什么它们不在您的系统中。xargs不是一个好方法,它会过于复杂。正如我最初所说,我会使用一个变量。你到底要改变哪一部分?只是不缓冲还是更多的东西?