如何将管道文本处理为 grep?

如何将管道文本处理为 grep?

想要一个脚本来像 grep 一样处理屏幕打印。
我可以像这样运行它:ca​​t file.txt |我的脚本

尝试了下面的脚本,它没有打印出任何内容。

#!/bin/bash
line=$@
echo $line 

答案1

与 @glemco 的答案相同的想法,但这个版本对于特殊字符应该是安全的(不包括 NULL 字节):

#!/bin/bash
while IFS= read -r line
do
  printf '%s\n' "$line"
done
  • IFS=是为了防止修剪前导和尾随空格
  • -r用于防止反斜杠转义被处理
  • "周围的引号"$line"是为了防止全局扩展,并防止用单个空格替换空白序列

答案2

您正在尝试从命令行参数 ( $@) 读取,而您应该从stdin.基本上,管道将第一个命令附加stdout到第二个命令stdin。在 bash 中执行您想要的操作的一个简单方法是使用read内置命令,如示例中所示逐行执行。

#!/bin/bash
while read line
do
  echo $line
done

当然你可以做任何你想做的事情而不是 echo 。

相关内容