我发现grep的——color=always标志非常有用。但是,grep只打印匹配的行(除非您要求上下文行)。假设它打印的每一行都有一个匹配项,那么高亮显示并不能增加尽可能多的功能。
我真的想猫一个文件,并看到整个文件与模式匹配突出显示。
是否有某种方法可以告诉grep打印正在读取的每一行,而不管是否有匹配?我知道我可以编写一个脚本来在文件的每一行上运行grep,但我很好奇标准grep是否可以做到这一点。
我发现grep的——color=always标志非常有用。但是,grep只打印匹配的行(除非您要求上下文行)。假设它打印的每一行都有一个匹配项,那么高亮显示并不能增加尽可能多的功能。
我真的想猫一个文件,并看到整个文件与模式匹配突出显示。
是否有某种方法可以告诉grep打印正在读取的每一行,而不管是否有匹配?我知道我可以编写一个脚本来在文件的每一行上运行grep,但我很好奇标准grep是否可以做到这一点。
当前回答
另一种肮脏的方式:
grep -A80 -B80 --color FIND_THIS IN_FILE
我做了一个
alias grepa='grep -A80 -B80 --color'
把bashrc打印出来。
其他回答
这里有一些类似的东西。很有可能,无论如何你都会用得更少,所以试试这个:
less -p pattern file
它将突出显示该模式,并跳转到该模式在文件中第一次出现的位置。
你可以用n跳到下一个出现点,用p跳到前一个出现点,用q退出。
您也可以创建别名。在你的.bashrc(或osx上的.bash_profile)中添加这个函数
function grepe {
grep --color -E "$1|$" $2
}
你现在可以这样使用别名:"ifconfig | grepe inet"或"grepe css index.html"。
(PS:别忘了源~/。在当前会话上重新加载Bashrc)
这是一种方法,
wc -l filename
会给你行数,比如NN,你能做什么
grep -C NN --color=always filename
也试一试:
exception 'pattern1|pattern2' FILE.txt | less -Sp 'pattern1|pattern2'
这将为您提供一个带有高亮模式/s的表格输出。
以下是我的方法,灵感来自@kepkin的解决方案:
# Adds ANSI colors to matched terms, similar to grep --color but without
# filtering unmatched lines. Example:
# noisy_command | highlight ERROR INFO
#
# Each argument is passed into sed as a matching pattern and matches are
# colored. Multiple arguments will use separate colors.
#
# Inspired by https://stackoverflow.com/a/25357856
highlight() {
# color cycles from 0-5, (shifted 31-36), i.e. r,g,y,b,m,c
local color=0 patterns=()
for term in "$@"; do
patterns+=("$(printf 's|%s|\e[%sm\\0\e[0m|g' "${term//|/\\|}" "$(( color+31 ))")")
color=$(( (color+1) % 6 ))
done
sed -f <(printf '%s\n' "${patterns[@]}")
}
这接受多个参数(但不允许自定义颜色)。例子:
$ noisy_command | highlight ERROR WARN