3

我正在寻找一个 linux 命令,它在文本文件中搜索字符串,并在文件中的每次出现时突出显示(颜色)它,而不省略文本行(就像 grep 一样)。

4

6 回答 6

5

我写了这个方便的小脚本。它可能可以扩展以更好地处理 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"
于 2012-10-29T23:12:51.317 回答
2

尝试

tail -f yourfile.log | egrep --color 'DEBUG|'

其中 DEBUG 是您要突出显示的文本。

于 2015-01-29T08:33:24.157 回答
0

我认为你的意思是“不省略文本行”(而不是发射)......

我知道没有这样的命令,但是您可以使用这样的脚本(这是一个简单的解决方案,将文件名(不带空格)作为第一个参数,将搜索字符串(也不带空格)作为第二个参数):

#!/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
于 2012-10-11T01:35:00.677 回答
0

我最近有这样的要求,并破解了一个小程序来做到这一点。关联

用法:./highlight test.txt '^foo' 'bar$'

请注意,这是非常粗糙的,但可以通过一些抛光制成通用工具。

于 2012-10-30T00:36:12.490 回答
0

使用dwdiff,输出颜色和行号的差异。

echo "Hello world @ $(date)" > file1.txt
echo "Hello world @ $(date)" > file2.txt

dwdiff -c -C 0 -L file1.txt file2.txt

在此处输入图像描述

于 2020-06-17T13:02:54.353 回答
0

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" '文件名'

于 2019-05-22T15:46:47.750 回答