1

我希望能够显示读取输入单词的每一行。现在我可以显示输入读取单词的索引位置。

echo "Filename"
read file

echo "A word"
read word

echo $file | awk '{print index($0,"'"$word"'")}'
4

2 回答 2

1

按照这里的要求,这是一个如何使用 grep 的示例。
以下命令将使用 wget 获取此 stackoverflow 网页的内容,该-O -选项告诉 wget 将 html 输出到 std out,然后将其通过管道传输到grep -n grep.
grep 匹配术语“grep”出现在 html 中的实例数,然后输出匹配发生的相应行号 - 并突出显示匹配。

wget -O - http://stackoverflow.com/questions/27691506/how-to-display-a-word-from-different-lines | grep -n grep

例如,当我在终端中运行时(忽略 wget 相关输出)grep -n grep会给出:

42: <span class="comment-copy">why dont you use <code>grep</code> ?</span>
468: <span class="comment-copy">@nu11p01n73R Can you give me any example, on how to use grep?</span>
495: <span class="comment-copy">As per your question <code>grep $word $file</code> will output lines in <code>$file</code> containing <code>$word</code></span>
521: <span class="comment-copy">If you want line numbers too, you can use <code>grep</code> like this: <code>grep -in $word $file</code></span>

注意 stackoverflow 语法突出显示与您在终端中获得的不同

于 2014-12-29T16:27:15.097 回答
1

如果您还想打印行号

read -p 'Filename? ' fname
read -p 'Word to search? ' word
awk /"$word"/'{print NR, $0}' "$fname"

如果你不想要行号

read -p 'Filename? ' fname
read -p 'Word to search? ' word
awk /"$word"/ "$fname"

顺便说一句,每个人都告诉你的是“使用 grep”,但是看看这个

% time for i in {1..10000} ; do grep alias .bashrc > /dev/null ; done

real    0m22.665s
user    0m2.672s
sys     0m3.564s
% time for i in {1..10000} ; do mawk /alias/ .bashrc > /dev/null ; done

real    0m21.951s
user    0m3.412s
sys     0m3.636s

当然gawk更慢,在本例中为 27.9 秒。

于 2014-12-29T17:05:34.367 回答