显示/ etc中包含其名称中的数字的配置文件(使用grep)

时间:2017-01-15 07:21:51

标签: bash grep

here.

中的任务(12)

使用 grep 我可以按照以下方式解决此任务:

grep --no-message -l [[:alnum:]] /etc/* | grep [[:digit:]]

获得了类似的结果:

ls -o /etc/ | grep ^- | awk '{print $8}' | grep [[:digit:]]

但我希望以递归方式读取每个目录下的所有文件。这就是我能做的:

grep --no-message -lR [[:alnum:]] /etc/* | grep [[:digit:]]

今天如何解决这项任务?这是正确的方法吗?您可以提供哪些其他解决方案来解决此任务?

4 个答案:

答案 0 :(得分:2)

您不应仅仅使用grep来获取文件名。而不是我认为你想用

做的事情
grep --no-message -l [[:alnum:]] /etc/*

你可以做到

echo /etc/*

由于目标是列出带有数字的文件,因此可以使用类似:

的glob
echo /etc/*[[:digit:]]*

如果你想以递归的方式做到这一点,你可以用bash这样做:

shopt -s globstar
echo /etc/**/*[[:digit:]]*

或者您可以使用find

find /etc -name '*[[:digit:]]*'

答案 1 :(得分:1)

您可以使用find

find /etc -type f -name \*[[:digit:]]\*

请注意,此命令仅列出 names 中带有数字的文件,而不是完整路径。对于后者使用不同的过滤器:

find /etc -type f -path \*[[:digit:]]\*

答案 2 :(得分:0)

格里沙和安德烈给出了完美的答案。但是,如果您正在寻找使用grep的解决方案,请点击此处。

while read -r filepath; do
  # grep for digits in the basename so that we choose only those
  # files that have a digit in them, not in any parent directory name
  if grep -q '[[:digit:]]' <<< "$(basename $filepath)"; then
    echo "$filepath"
  fi
done < <(find /etc -type f -print)

根本没有效率。

答案 3 :(得分:0)

如果任务是要有一个纯grep解决方案,那么它就是:

grep -laR . /etc | grep '^.*/[^/]*[[:digit:]][^/]*$'

正则表达式:

  1. ^...$覆盖整行;
  2. .*/[^/]*...[^/]*仅查找文件名。