使grep输出更具可读性

时间:2014-10-28 16:53:45

标签: bash command-line awk grep

我正在使用grep处理grep -orI "id=\"[^\"]\+\"" . | sort | uniq -d文件中的模式 这给出了如下输出:

./myFile.html:id="matchingR"
./myFile.html:id="other"
./myFile.html:id="cas"
./otherFile.html:id="what"
./otherFile.html:id="wheras"
./otherFile.html:id="other"
./otherFile.html:id="whatever"

管道此方法的便捷方法有以下输出:

./myFile.html
  id="matchingR"
  id="other"
  id="cas"
./otherFile.html
  id="what"
  id="wheras"
  id="other"
  id="whatever"

基本上按文件名分组结果。

3 个答案:

答案 0 :(得分:4)

不是最漂亮但却有效。

awk -F : -v OFS=: 'f!=$1 {f=$1; print f} f==$1 {$1=""; $0=$0; sub(/^:/, "  "); print}'

如果你的所有行都没有包含冒号,那么这个更简单的版本也可以。

awk -F : 'f!=$1 {f=$1; print f} f==$1 {$1=""; print}'

冒号(-F :)上的这两个分割字段在与保存的值不同时打印出第一个字段(文件名)(并保存新值),当第一个字段与保存的值匹配时,它们将删除第一场和印刷。它们在删除字段和打印输出方面有所不同。第一次尝试在匹配的行中保留冒号。第二个(和@ fedorqui' s版本... f==$1 {$0=$2; print})假设没有其他冒号开始。

答案 1 :(得分:0)

将输出传递给此脚本:

#!/bin/sh
sed 's/:/ /' | while read FILE TEXT; do
if [ "$FILE" = "$GROUP" ]; then
    echo "  $TEXT"
else
    GROUP="$FILE"
    echo "$FILE"
    echo "  $TEXT"
fi
done

答案 2 :(得分:0)

这是一个简短的awk

awk -F: '{print ($1!=f?$1 RS:""),$2;f=$1}' file
./myFile.html
 id="matchingR"
 id="other"
 id="cas"
./otherFile.html
 id="what"
 id="wheras"
 id="other"
 id="whatever"