我经常使用 grep 的 --colour 选项,但我也经常使用较少。我怎样才能减少 grep 结果并仍然保留颜色。(或者这可能吗?)
grep "search-string" -R * --colour | less
Run Code Online (Sandbox Code Playgroud)
编辑:
我正在寻找直接解决方案或任何与此等效的方法。
如果我已将命令的结果通过管道传送到less,然后决定将内容保存到文件中,这可能吗?
我试过a在缓冲区的末尾设置一个标记,然后返回到顶部并使用|avi将整个内容发送到vi,但这不起作用。
例子:
ls | echo不打印任何内容(实际上是一个空行)。我希望它打印文件列表。
ls | grep 'foo',另一方面,按预期工作(打印名称中带有 'foo' 的文件)。
我在这些情况下所做的类似于:
ls | while read OUT; do echo $OUT; done但这相当麻烦。
为什么管道对某些命令有效,而对其他命令无效?我怎样才能规避这个问题?
ls -l --color=auto | tee output.log
Run Code Online (Sandbox Code Playgroud)
没有管道/三通,它是彩色的。我怎样才能使它在使用时保持着色tee(只能在屏幕上着色,我不关心日志中的颜色)。
我想通过 100 Mbit/s 的线路备份从我网络中的一台计算机到同一网络中的另一台计算机的路径。为此我做了
dd if=/local/path of=/remote/path/in/local/network/backup.img
Run Code Online (Sandbox Code Playgroud)
这给了我大约 50 到 100 kB/s 的非常低的网络传输速度,这将永远需要。所以我停止了它并决定尝试动态压缩它以使其更小,以便传输的数量更少。所以我做了
dd if=/local/path | gzip > /remote/path/in/local/network/backup.img.gz
Run Code Online (Sandbox Code Playgroud)
但是现在我得到了大约 1 MB/s 的网络传输速度,因此速度提高了 10 到 20 倍。注意到这一点后,我在多个路径和文件上进行了测试,结果始终相同。
为什么管道dd通过gzip也会大大增加传输速率,而不是只将流的字节长度减少很多?由于压缩时 CPU 消耗较高,我原以为传输速率会略有下降,但现在我得到了双重加分。不是我不高兴,而是我只是想知道。;)
我正在尝试stderr从 bash shell仅打印 cURL 请求(发送到)的详细部分。
但是当我stdout像这样重定向时:
curl -v http://somehost/somepage > /dev/null
Run Code Online (Sandbox Code Playgroud)
某种结果表出现在输出的中间stderr:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
Run Code Online (Sandbox Code Playgroud)
接下来是接近尾声:
{ [data not shown]
118 592 0 592 0 0 15714 0 --:--:-- --:--:-- --:--:-- 25739
Run Code Online (Sandbox Code Playgroud)
这使得响应标头的可读性降低。
不重定向时我看不到此文本。
另一种查看效果的方法:
表没有出现:
curl -v http://somehost/somepage 2>&1
Run Code Online (Sandbox Code Playgroud)
表出现:
curl -v http://somehost/somepage 2>&1 | cat …Run Code Online (Sandbox Code Playgroud) 是否有一个过滤器可以用来在 linux 上对管道进行速率限制?如果存在,我们称之为速率限制,我希望能够在终端中输入类似的内容
cat /dev/urandom | rate-limit 3 -k | foo
Run Code Online (Sandbox Code Playgroud)
为了以(低于)3 kbytes/s 的速率将随机字节流发送到 foo 的标准输入。
考虑以下 Powershell 脚本,该脚本在 C:\ 中搜索名称中带有“og”的文件夹:
PS C:\> (ls | %{$_.Name} | ?{$_.Contains("og")})
性能日志
程序文件
设置日志
现在我缩小搜索范围,只得到一项:
PS C:\> (ls | %{$_.Name} | ?{$_.Contains("Prog")})
程序文件
奇怪的是,第一个操作产生一个array,而第二个操作(恕我直言,语义上是相同的操作,所以它应该产生相同类型的结果)产生一个string。这可以在以下结果中看到:
PS C:\> (ls | %{$_.Name} | ?{$_.Contains("og")}).Length
3
PS C:\> (ls | %{$_.Name} | ?{$_.Contains("Prog")}).Length
13
这可能非常令人恼火,因为显然匹配“og”的文件夹比匹配“Prog”的文件夹少。
显然,PowerShell 隐式地将单项数组“拆箱”为单个对象,我们永远不会得到长度为 1 的数组。似乎每次我想计算管道中的结果时,我都必须检查我是否“ m 是否处理数组。
我怎样才能防止这种情况发生?你如何处理这个问题?
假设我有一个 bash shell 脚本Myscript.sh,它需要一个参数作为输入。
但我希望被调用的文本文件的内容text.txt作为该参数。
我试过这个,但它不起作用:
cat text.txt | ./Myscript.sh
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
我们都知道mkfifo和管道。第一个创建了一个命名管道,因此必须选择一个名称,最有可能与mktemp之后记得取消链接。另一个创建了一个匿名管道,没有命名和删除的麻烦,但是管道的末端被绑定到管道中的命令,以某种方式获取文件描述符并在其余部分使用它们并不是很方便的脚本。在编译的程序中,我会这样做ret=pipe(filedes);在 Bash 中有很多exec 5<>file人会期待类似的东西,"exec 5<> -"或者"pipe <5 >6"- 在 Bash 中有类似的东西吗?