我正在寻找一个 linux 命令,它在文本文件中搜索字符串,并在文件中的每次出现时突出显示(颜色)它,而不省略文本行(就像 grep 一样)。
6 回答
我写了这个方便的小脚本。它可能可以扩展以更好地处理 args
#!/bin/bash
if [ "$1" == "" ]; then
echo "Usage: hl PATTERN [FILE]..."
elif [ "$2" == "" ]; then
grep -E --color "$1|$" /dev/stdin
else
grep -E --color "$1|$" $2
fi
它对于突出显示正在运行的用户的进程很有用:
ps -ef | hl "alice|bob"
尝试
tail -f yourfile.log | egrep --color 'DEBUG|'
其中 DEBUG 是您要突出显示的文本。
我认为你的意思是“不省略文本行”(而不是发射)......
我知道没有这样的命令,但是您可以使用这样的脚本(这是一个简单的解决方案,将文件名(不带空格)作为第一个参数,将搜索字符串(也不带空格)作为第二个参数):
#!/usr/bin/env bash
ifs_store=$IFS;
IFS=$'\n';
for line in $(cat $1);
do if [ $(echo $line | grep -c $2) -eq 0 ]; then
echo $line;
else
echo $line | grep --color=always $2;
fi
done
IFS=$ifs_store
另存为,例如 colorcat.sh,适当地设置权限(以便能够执行它)并将其称为
colorcat.sh filename searchstring
使用dwdiff,输出颜色和行号的差异。
echo "Hello world @ $(date)" > file1.txt
echo "Hello world @ $(date)" > file2.txt
dwdiff -c -C 0 -L file1.txt file2.txt
command | grep -iz -e "keyword1" -e "keyword2"
(如果只搜索单个单词,忽略 -e 开关,-i 忽略大小写,-z 视为单个文件)
或者,在读取文件时 grep -iz -e "keyword1" -e "keyword2" 'filename'
或者
command | grep -A 99999 -B 99999 -i -e "keyword1" "keyword2"
(如果只搜索单个单词,忽略 -e 开关,-i 忽略大小写,-A 和 -B 表示要显示的关键字之前/之后的行数)
或者,在读取文件时
grep -A 99999 -B 99999 -i -e "keyword1" "keyword2" '文件名'