如何在模式文件上调用 grep?
How to call grep on pattern files?
我正在尝试对名称与正则表达式匹配的文件进行 grep。但以下:
#!/bin/bash
grep -o -e "[a-zA-Z]\{1,\}" -h --include= -R
仅在某些情况下有效。当我这样调用这个脚本时:
./script.sh dir1/ [A-La-l]+
没用。但以下:
./script.sh dir1/ \*.txt
工作正常。我也尝试过在双引号和引号中传递参数,但都不适合我。
您有解决这个问题的想法吗?
grep
的 --include
选项不接受正则表达式,而是接受 glob(例如 *.txt
),它的功能要弱得多。您必须决定是要匹配正则表达式还是 glob——*.txt
不是有效的正则表达式(等效的正则表达式是 .*\.txt
),而 [A-La-l]+
不是有效的 glob。
如果你想用正则表达式来完成,你将无法单独使用 grep
来完成。您可以做的一件事是将文件选择留给其他工具,例如 find
:
find "" -type f -regex "" -exec grep -o -e '[a-zA-Z]\{1,\}' -h '{}' +
这将构造 运行 一个命令 grep -o -e '[a-zA-Z]\{1,\}' -h list of files in matching the regex
。如果您将 +
替换为 \;
,它将 运行 单独针对每个文件的命令,这应该会(非常)稍微慢一点地产生相同的结果。
如果你想用globs来做,你可以像以前一样进行;您的代码已经这样做了。不过,您应该在 </code> 和 <code>
两边加上双引号。
我正在尝试对名称与正则表达式匹配的文件进行 grep。但以下:
#!/bin/bash
grep -o -e "[a-zA-Z]\{1,\}" -h --include= -R
仅在某些情况下有效。当我这样调用这个脚本时:
./script.sh dir1/ [A-La-l]+
没用。但以下:
./script.sh dir1/ \*.txt
工作正常。我也尝试过在双引号和引号中传递参数,但都不适合我。 您有解决这个问题的想法吗?
grep
的 --include
选项不接受正则表达式,而是接受 glob(例如 *.txt
),它的功能要弱得多。您必须决定是要匹配正则表达式还是 glob——*.txt
不是有效的正则表达式(等效的正则表达式是 .*\.txt
),而 [A-La-l]+
不是有效的 glob。
如果你想用正则表达式来完成,你将无法单独使用 grep
来完成。您可以做的一件事是将文件选择留给其他工具,例如 find
:
find "" -type f -regex "" -exec grep -o -e '[a-zA-Z]\{1,\}' -h '{}' +
这将构造 运行 一个命令 grep -o -e '[a-zA-Z]\{1,\}' -h list of files in matching the regex
。如果您将 +
替换为 \;
,它将 运行 单独针对每个文件的命令,这应该会(非常)稍微慢一点地产生相同的结果。
如果你想用globs来做,你可以像以前一样进行;您的代码已经这样做了。不过,您应该在 </code> 和 <code>
两边加上双引号。