在命令结尾处是否可以将输入提供给一个非常长的命令?下面的例子可以更清楚地解释我的查询。
目前正在进行点击,我必须这样做:
zgrep -i "A VERY LONG TEXT" file |awk '{print $1}'
每次我必须将光标移回“非常长的文本”来更改模式。我想改变命令,以便在命令结束时出现“非常长的文本”我可以快速改变它。
command1 |command2 |some_magic "A VERY LONG TEXT"
我知道我可以通过CAT然后进行grepping来实现这个结果,想知道是否有其他方法可以做到这一点。可能就像将它分配给临时变量?
我需要在会话文件中获取所有命令及其输出的实时时间戳。所以我必须使用下面的命令。但在执行任何命令之前,我必须将光标移动到unbuffer并更改命令。有什么方法可以改变下面的命令,这样我可以在行尾输入我的命令吗?
/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>
简而言之,我需要一些命令来获取我执行的所有命令及其输出的时间戳。
答案 0 :(得分:0)
如果您只是将此文本设置为变量怎么办?
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)"
^^^^^^^^^^^^^^^^^^^^^^^^^
答案 1 :(得分:0)
编辑并重新提交命令时,请使用:
Ctrl-A
将光标快速移回到行的开头
Ctrl-E
快速移至行尾
Alt-F
向前移动一个字
Alt-B
向后移动一个字
或者使用fc
命令在编辑器中打开最后一个命令并允许您编辑 - 比如使用vi
命令,然后在保存时,它会被重新提交执行。 / p>
答案 2 :(得分:0)
这些快捷键可能对您有帮助。
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一样是密钥绑定。
答案 3 :(得分:0)
您可以定义一项功能,例如在~/.bash_profile
:
some_magic() {
zgrep "$1" file | awk '{print $1}'
}
并按以下方式使用:
some_magic "A VERY LONG TEXT"
至于你的第二个例子,一旦命令输出被管道传输,它就会被管道缓冲。因此,在管道另一侧获取的时间戳是错误的。无论如何,如果你不介意错误的时间戳,你可以使用这个功能:
some_other_magic() {
$1 | awk '{print strftime("%Y-%m-%d %H:%M:%S"), $0}'
}
并按以下方式使用:
some_other_magic "ls -lrt"