模式来自长度为14的变量。该字符串是grep的模式。现在,文本文件包含每行包含13个字符的行。
例如,长度为14的模式为
pattern = 58244804671021
,文本文件包含
3823480467102
4724470467102
如何让grep忽略模式中的最后一个字符?
答案 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