我正在使用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"
基本上按文件名分组结果。
答案 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"