如何显示不同行的单词?

时间:2014-12-29 15:21:09

标签: bash bash4

我希望能够显示输入读取中包含该单词的每一行。 现在我能够显示输入读取字的索引位置。

echo "Filename"
read file

echo "A word"
read word

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

2 个答案:

答案 0 :(得分: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

e.g。当我在终端中运行时(忽略与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语法突出显示与您在终端中获得的内容不同

答案 1 :(得分: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"
BTW,每个人都告诉你的是“使用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秒。