我希望能够显示读取输入单词的每一行。现在我可以显示输入读取单词的索引位置。
echo "Filename"
read file
echo "A word"
read word
echo $file | awk '{print index($0,"'"$word"'")}'
按照这里的要求,这是一个如何使用 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 语法突出显示与您在终端中获得的不同
如果您还想打印行号
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 秒。