Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sed 如何grep仅存在于一行中一定数量空格内的字符串_Sed_Grep - Fatal编程技术网

Sed 如何grep仅存在于一行中一定数量空格内的字符串

Sed 如何grep仅存在于一行中一定数量空格内的字符串,sed,grep,Sed,Grep,如何在一行的前36个空格内对字符串进行grep 我很难在一行中用格雷格搜索一串数字(例如“47225”或“82115”)。我知道这个数字实际上可能在一行中出现两次,但我知道我只想在该行中的前36个空格中包含这个数字的信息。不幸的是,它没有被列分隔,因为在这个特定的列中,可能有其他的数字在这个数字串的前面或后面 我尝试过将“47225”和“47225”变灰,但这无助于在前36个空格后可能存在相同的字符串。我可以使用sed或aux吗?如果是,怎么做?试试这个: cut -c-36 file | gr

如何在一行的前36个空格内对字符串进行grep

我很难在一行中用格雷格搜索一串数字(例如“47225”或“82115”)。我知道这个数字实际上可能在一行中出现两次,但我知道我只想在该行中的前36个空格中包含这个数字的信息。不幸的是,它没有被列分隔,因为在这个特定的列中,可能有其他的数字在这个数字串的前面或后面

我尝试过将“47225”和“47225”变灰,但这无助于在前36个空格后可能存在相同的字符串。我可以使用sed或aux吗?如果是,怎么做?

试试这个:

cut -c-36 file | grep -E '47225|82115'
我猜空格是指字符位置…

使用:

grep -E '^.{0,31}(47225|82115)' file
^.{0,31}
匹配0到31个字符
(47225 | 82115)
与您想要的五位数字中的任意一位匹配。因为5+31=36,这确保只有47225或82115出现在行的前36个字符内时才匹配

例子 考虑以下测试文件:

$ cat file
keep...........................47225
keep...........................82115
ignore..........................47225
ignore..........................82115
上面的前两行是36个字符,应该匹配。上面的最后两行是37个字符,因此应该忽略

我们的命令返回:

$ grep -E '^.{0,31}(47225|82115)' file
keep...........................47225
keep...........................82115
这可能适用于您(GNU-sed):

复制该行,删除字符36后的所有内容,模式匹配,如果未找到,则删除,否则恢复原始行

sed -r 'h;s/^(.{36}).*/\1/;/pattern1|pattern2/!d;x' file