可以使用 globbing 来搜索文件内容吗?

可以使用 globbing 来搜索文件内容吗?

我基本知道通配符用于在 shell 中进行文件名扩展。我还知道正则表达式用于文件内的文本模式匹配。但是,通配符是否也用于文件内的文本模式匹配?

任何指点都将不胜感激。

答案1

通配符用于搜索文件内容?

假设文本文件...

简短回答... 是的,

较长的答案... Shell 方面... 在bash以及其他一些 shell中kshzsh您可以像这样进行单词匹配:

$ for word in one two three; do
    [[ "$word" = tw* ]] && echo "$word"
    done
two

其中星号*(也可以?[...])将对单词中的字母进行“匹配”(不是获取当前目录中的文件名) ... 那是仅有的如果它在扩展测试括号内使用(即双人间[[...]],而不是标准单人间[...])与===运算符...要理解通配符上例中的行为,请将其与运算符=~(这使得右侧能够扩展正则表达式) 用于以下示例:

$ for word in one two three; do
    [[ "$word" =~ tw* ]] && echo "$word"
    done
two
three

但是,shell 的这种文本匹配功能仅适用于单个单词,在大多数情况下,您需要实现一种机制将整行分解为单个单词,然后才能有效地依赖它进行文本匹配(例如,您可以通过不在下一个示例中引用参数来允许 shell 的自然单词拆分发生$line...请注意,这可能不是最好的机制,但它满足了我们此处示例的目的)...然后您可以在文件中搜索并匹配文本,例如:

$ cat file.txt
This is the first line.
This is the second line.
This is the third line.
This is the fourth line.
This is the fifth line.

$ while IFS= read -r line; do
  for word in $line; do
    [[ "$word" = f* ]] && echo "$line"
    done
  done < file.txt
This is the first line.
This is the fourth line.
This is the fifth line.

另一个文本示例(不是文件名) 可以在 shell 中用case ... esac如下语句演示通配符:

#!/bin/bash

read -p "Enter Y/Yes, y/yes, N/No, n/no or D/d and one character/digit e.g. d2 :" reply

case "$reply" in
  [Yy]* ) echo "Confirmed ... You entered $reply";;
  [Nn]* ) echo "Denied ... You entered $reply";;
  [Dd]? ) echo "Identified ... You entered $reply";;
  * ) echo "Invalid ... You entered $reply";;
esac

运行时的行为如下:

$ Enter Y/Yes, y/yes, N/No, n/no or D/d and one character/digit e.g. d2 :yeah
Confirmed ... You entered yeah

$ Enter Y/Yes, y/yes, N/No, n/no or D/d and one character/digit e.g. d2 :nope
Denied ... You entered nope

$ Enter Y/Yes, y/yes, N/No, n/no or D/d and one character/digit e.g. d2 :D7
Identified ... You entered D7

$ Enter Y/Yes, y/yes, N/No, n/no or D/d and one character/digit e.g. d2 :D77
Invalid ... You entered D77

对于其他文本处理/匹配工具,如,,grep...等,星号(awksed*也可以?[...]) 用法/行为由工具手册定义,在大多数情况下它将是一个正则表达式运算符/量词,与 0 个或更多个前面的正则表达式匹配。

对于其他文件搜索工具(如findlslocate... 等),星号*(也可以?[...]) 用法/行为也由工具手册定义,在大多数情况下将类似于 shell 的通配符的标准行为,并且将扩展为指定搜索目录中的文件/目录的名称,如果未指定搜索目录,则将扩展为当前工作目录中的文件/目录的名称。

相关内容