获取grep值并将计数和值一起输出

获取grep值并将计数和值一起输出

我正在尝试制作一个 bash 脚本来 grep 值并将计数和值一起输出

像这样的东西

grep -c 'Thenis' example.txt > example.lst

但在该列表文件中不仅显示计数,还显示我输入的值,如下所示

Thenis: 123

答案1

您可以启动一个子 shell 并使用$0变量来执行此操作。

bash -c 'echo "$0: $(grep -c $0 example.txt)"' 'Thenis' > example.lst

答案2

由于grep -c仅打印数字,因此我们需要使用给定的模式作为前缀。这可以通过使用内置的 shellprintf打印模式来完成,而无需跟随换行符。然后我们让 grep 打印计数(在同一行)。

使用括号将两个语句放置在子 shell 中允许所有输出仅重定向一次。

我会这样做:

(printf '%s: ' Thenis; grep -c Thenis example.txt) > example.lst

如果您想制作一个简单的脚本来执行此操作:

#!/bin/sh
if [ "$#" -ne 2 ]
then
    echo >&2 "Usage: $0 pattern file"
    exit 1
fi
printf '%s: ' "$1"
grep -c "$1" "$2"

答案3

还没人尝试过使用 sed 吗?

grep -c Thenis example.txt|sed s/^/Thenis:\ /  > example.lst

或者如果您想要一个更通用的解决方案并且有 gnu sed

echo Thenis -- example.txt | \
sed -re 's/^(.*) -- (.*)$/echo -n \1:;grep -c \1 \2/e'

最后一个警告是:威力足以搬起石头砸自己的脚。

答案4

尝试写script.sh

#!/bin/bash

echo $1: $(grep -c "$1" "$2")

因此,如果example.txt

Then is, Then-is, Then's, Thenis, Thins,
Thesis, Thanes, Thence, Things,
Thenis, Thorns, Thane's

script.sh在命令提示符下运行,将其输出保存到example.lst

$ ./script.sh 'Thenis' example.txt > example.lst

searchword: count然后可以在以下位置找到所需的结果example.lst

$ cat example.lst
Thenis: 2

细节

  • 与所有脚本一样,确保脚本可执行,例如通过发出命令sudo chmod +x script.sh
  • bash 位置参数:$1第一个参数传递给script.sh$2第二个参数,依此类推
  • $(...)是命令替换,以获取所包含命令的结果,以供使用echo

相关内容