如何grep在行中起始位置和结束位置之间具有模式的行?

时间:2016-09-03 08:51:15

标签: shell

我有以下文件样本:

123456789000000000123456789000000000

123456789123456789123456789000000000

我想要在行的第10和第18位之间有000000000的行。以这种方式,将跳过/忽略第二行。

如何实现这一目标?

2 个答案:

答案 0 :(得分:3)

您必须使用^作为行首,.表示任何字符 你可以从

开始
echo "123456789000000000123456789000000000
123456789123456789123456789000000000" | grep "^.........000000000"

对于此命令,您需要计算命令中的字符数 该命令可以简化为

echo "123456789000000000123456789000000000
123456789123456789123456789000000000" | grep -E "^.{9}0{9}"

答案 1 :(得分:0)

使用awk substr而不使用任何正则表达式更容易:

awk 'substr($0, 10, 9) != "000000000"' file

123456789123456789123456789000000000

substr($0, 10, 9)将获得第10个位置和第18个位置之间每个记录的子字符串。

您也可以使用:

awk 'substr($0, 10, 9) != sprintf("%09d", 0)' file

sprintf("%09d", 0)将打印0 9次。