grep忽略模式中的字符

时间:2015-05-14 07:01:13

标签: regex unix command-line grep

模式来自长度为14的变量。该字符串是grep的模式。现在,文本文件包含每行包含13个字符的行。

例如,长度为14的模式为

pattern =   58244804671021

,文本文件包含

3823480467102
4724470467102

如何让grep忽略模式中的最后一个字符?

3 个答案:

答案 0 :(得分:1)

假设您的模式位于$pattern并且您正在使用bash,则可以执行

grep ${pattern%?} file

从变量中删除最后一个字符。

您还可以将cut与字符1到13:

一起使用
grep $(echo "$pattern" | cut -c 1-13 -) file

甚至更好的bash和ksh作为here-string

grep $(cut -c 1-13 <<<$pattern) file

答案 1 :(得分:1)

你的意思是这样的:

cat file
5824480467102
4534324435455
8244804671021

所有line = 13字符

pattern="58244804671021"

模式= 14字符

awk -v p="$pattern" '$1==substr(p,1,13)' file
5824480467102

这将删除模式的最后一个字符,并根据字段#1

对其进行测试

答案 2 :(得分:0)

您可以将参数扩展用作

$ grep  ${pattern:0:13} filename
  

来自Bash手册

     

如果offset的计算结果小于零,则该值用作   从参数值的末尾开始的字符偏移量。如果   长度评估 -                 ates到一个小于零的数字,它被解释为从参数值的末尾开始的字符偏移量   而不是一些特征 -                 ters,扩展是offset和结果之间的字符。请注意,必须将负偏移分开   结肠至少有一个                 空间,以避免与: - 扩展混淆。

  • ${variable:offset:lenght}

    • pattern是变量

    • 0偏移,或开始

    • 13

<强>测试

$ cat input
3823480467102
4724470467102
5824480467102

$ grep  ${pattern:0:13} input
5824480467102