如何在一行的前36个空格中搜索字符串?
我无法在一行中搜索一串数字(例如" 47225"或" 82115")。我知道这个数字实际上可能在一行内发生两次,但我知道如果它在前36个空格中包含这个数字,我只想要行中的信息。不幸的是,它没有按列分隔,因为在此特定列中可能还有其他数字在数字字符串之前或之前。
我试过grepping" 47225"和" 47225"但是这并没有帮助在前36个空格之后可能存在相同的字符串这一事实。我可以使用sed或aux吗?如果是这样,怎么样?
答案 0 :(得分:1)
试试这个:
cut -c-36 file | grep -E '47225|82115'
我想通过空格,你的意思是字符位置 ......
答案 1 :(得分:1)
使用:
^.{0,31}
(47225|82115)
匹配零到31个字符。 $ cat file
keep...........................47225
keep...........................82115
ignore..........................47225
ignore..........................82115
匹配您想要的五位数字中的任何一个。因为5 + 31 = 36,这确保只有47225或82115出现在该行的前36个字符内时才匹配。
考虑这个测试文件:
$ grep -E '^.{0,31}(47225|82115)' file
keep...........................47225
keep...........................82115
上面的前两行是36个字符,应该匹配。上面的最后两行是37个字符长,因此应该被忽略。
我们的命令返回:
#include <stdio.h>
void some_fn(char *x)
{
printf("%d\n", x);
}
int main()
{
// They are stored on the same memory address
some_fn("A");
some_fn("A");
some_fn("B");
}
答案 2 :(得分:1)
这可能适合你(GNU sed):
sed -r 'h;s/^(.{36}).*/\1/;/pattern1|pattern2/!d;x' file
复制该行,删除字符36后的所有内容,模式匹配,如果未找到则删除,否则恢复原始行。