我正在尝试循环遍历一堆文件前缀,寻找每个文件中匹配给定模式的单行。我已经提取并概括了几个示例,并在下面使用它们来说明我的问题。
我搜索了一行可能以一些空格开头,后跟数字1234,然后是可能有更多空格,最后是数字98765。我知道感兴趣的文件以l76.logsheet开头,我想从文件中提取以一个或多个数字结尾的行。但是,我想确保排除以任何其他内容结尾的文件(其中有太多选项不适合合理使用grep --exclude选项)。以下是我在tcsh shell中的操作方式:
我的问题是,在bash shell中如何搜索以零个或多个先前模式结尾的文件?我有一个解决方法,但我正在寻找这个问题的实际答案,这可能会在将来节省我(以及其他人)的时间。
我搜索了一行可能以一些空格开头,后跟数字1234,然后是可能有更多空格,最后是数字98765。我知道感兴趣的文件以l76.logsheet开头,我想从文件中提取以一个或多个数字结尾的行。但是,我想确保排除以任何其他内容结尾的文件(其中有太多选项不适合合理使用grep --exclude选项)。以下是我在tcsh shell中的操作方式:
tcsh% grep -E '^\s{0,}1234\s+98765' l76.logsheet[0-9]{0,}
l76.logsheet10:1234 98765 y 13:02:44 2
以下是另一个例子,我再次搜索98765,但使用了不同的数字和文件前缀:
tcsh% grep -E '^\s{0,}4321\s+98765' k43.logsheet[0-9]{0,}
k43.logsheet1: 4321 98765 y 13:06:38 14
这个功能非常好用,返回了我所需要的内容。
我的问题出现在bash shell中。重复相同的命令会返回一个非常有趣的结果。对于第一行,没有任何问题:
bash$ grep -E '^\s{0,}1234\s+98765' l76.logsheet[0-9]{0,}
这将返回:
l76.logsheet10:1234 98765 y 13:02:44 2
但是第二个示例的结果只在文件名末尾具有一个数字。这将导致bash在提供正确结果之前抛出错误:
bash$ grep -E '^\s{0,}4321\s+98765' k43.logsheet[0-9]{0,}
grep: k43.logsheet[0-9]0: No such file or directory
k43.logsheet1: 4321 98765 y 13:06:38 14
我的问题是,在bash shell中如何搜索以零个或多个先前模式结尾的文件?我有一个解决方法,但我正在寻找这个问题的实际答案,这可能会在将来节省我(以及其他人)的时间。