小编Sam*_*ami的帖子

Grep - 如何仅输出捕获组的内容

我试图找到一种方法让 grep 只输出捕获组的内容。例如,如果我有以下文件:

hello1, please match me
hello2, please do not match me
Run Code Online (Sandbox Code Playgroud)

我想

hello1, please match me
hello2, please do not match me
Run Code Online (Sandbox Code Playgroud)

输出hello1. 但是它输出hello1, please match me.

现在,我知道这grep -Po 'hello[0-9]+(?=, please match me)'可以解决问题,但我认为必须有一种方法可以简单地返回一个捕获组,但是我找不到任何信息(在网络上和 中man grep)。

是否有可能,或者捕获组仅用于反向引用?如果没有办法做到这一点,我会觉得很奇怪。

感谢您的时间,并随时批评这篇文章的构建方式!

bash shell grep

13
推荐指数
5
解决办法
7374
查看次数

如何在脚本执行过程中隐藏终端中的光标并在命令中断时将其恢复正常?

假设我有一个显示一些动画的脚本:

\n\n
while [ condition ]\ndo\n    echo -ne "\\rfinished \xe1\x95\x99( \xe1\x90\x95 )\xe1\x95\x93 "\n    sleep 0.3\n    echo -ne "\\rfinished \xe1\x95\x95( \xe1\x90\x9b )\xe1\x95\x97 "\n    sleep 0.3\ndone\n
Run Code Online (Sandbox Code Playgroud)\n\n

问题是光标在跳舞的小家伙旁边闪烁,这对我来说是一个(轻微的)不便,我更希望光标被隐藏。

\n\n

所以我尝试了tput civis隐藏光标。问题是你需要运行tput cnorm才能使其恢复正常。在我的例子中,如果我尝试:

\n\n
tput civis\nwhile [ condition ]\ndo\n    echo -ne "\\rfinished \xe1\x95\x99( \xe1\x90\x95 )\xe1\x95\x93 "\n    sleep 0.3\n    echo -ne "\\rfinished \xe1\x95\x95( \xe1\x90\x9b )\xe1\x95\x97 "\n    sleep 0.3\ndone\ntput cnorm\n
Run Code Online (Sandbox Code Playgroud)\n\n

这很有效,除非用户Ctrl-C退出我的程序,这将导致他们有一个不可见的光标,这确实很烦人。

\n\n

我尝试像这样运行脚本:

\n\n
./script || tput cnorm\n
Run Code Online (Sandbox Code Playgroud)\n\n

但这没有帮助。(我也希望能够运行脚本./script

\n\n

这开始是一个愚蠢的问题,但现在我真的很想知道如何解决它。

\n\n

那么,这个问题有解决方案吗?还是我必须忍受动画旁边这个闪烁的小光标?

\n

linux bash shell

7
推荐指数
1
解决办法
6910
查看次数

标签 统计

bash ×2

shell ×2

grep ×1

linux ×1