我的文档中包含{
和}
,但我发现存在错误。我使用grep -c { *
和grep -c } *
来查找{
和}
的数量不相等。我想找到那些可能有错误的行,所以我可以手动检查它们。
{
没有结束}
的行或带有}
的行而没有左括号{ } { } { }
。如何搜索没有正确数量大括号的行?
答案 0 :(得分:3)
您可以执行以下操作(这将打印行和行号) -
gawk -v FS="" '
{cnt=0;for(i=1;i<=NF;i++) if ($i=="{") ++cnt ;
else if ($i=="}") --cnt; if (cnt!=0) print NR":"$0}' file
[jaypal:~/Temp] cat file
this is {random text} some with { some without
purpose is{ to identify such lines} where { dont have a matching }
and print those lines with just one {
[jaypal:~/Temp] gawk -v FS="" '
> {cnt=0;for(i=1;i<=NF;i++) if ($i=="{") ++cnt ;
> else if ($i=="}") --cnt; if (cnt!=0) print NR":"$0}' file
1:this is {random text} some with { some without
3:and print those lines with just one {
答案 1 :(得分:2)
这可能对您有用:
sed 'h;y/}/{/;s/[^{]*{[^{]*{[^{]*//g;/./!d;g file
答案 2 :(得分:1)
试试这段代码。它将打印括号计数不匹配的那些行
#!/bin/bash
LINE_COUNT=1
cat decrypt.txt | while read line
do
i=0
O_B=0
C_B=0
while (( i++ < ${#line} ))
do
char=$(expr substr "$line" $i 1)
#echo $char
if [ "$char" = "{" ]
then
O_B=`expr $O_B + 1`
elif [ "$char" = "}" ]
then
C_B=`expr $C_B + 1`
fi
done
#echo "$line|$O_B|$C_B"
if [ $O_B -ne $C_B ]
then
echo "$LINE_COUNT|$line|$O_B|$C_B"
fi
LINE_COUNT=`expr $LINE_COUNT + 1`
done
答案 3 :(得分:1)
我不是在我的电脑上试试,但我认为这可能有用
grep -v '^\([^{}]*{[^{}]*}[^{}]*\)*$'
如果我写得正确,那么这应该匹配(因此不能打印,因为-v
)只有整行由成对组成的行,以便
重复零次或多次。