准备行的开始和结束?

我有一个文件,其中我想要 grep 以-rwx 或 drwx 和任意数字开始的行。

我有这个,但它不是很正确。有什么想法吗?

grep [^.rwx]*[0-9] usrLog.txt
249555 次浏览

棘手的部分是正则表达式,它包含一个破折号作为字符类中的有效字符之一。破折号必须立即出现在(正常)字符类的开始之后,立即出现在否定字符类的插入符号之后。如果您也需要一个关闭的方括号,那么您需要一个关闭的方括号后跟一个破折号。幸运的是,您只需要破折号,因此选择了符号。

grep '^[-d]rwx.*[0-9]$' "$@"

参见: 正则表达式Grep了解 POSIX 标准细节。

你可能想要 egrep 试试:

egrep '^[d-]rwx.*[0-9]$' usrLog.txt

看起来你是在正确的轨道... ^字符匹配行的开始,和 $匹配行的结束。乔纳森的模式对你有用,我只是想给你一个解释

你正在解析 ls -l的输出吗?

如果是,并且只想获取文件名

find . -iname "*[0-9]"

如果您别无选择,因为 usrLog.txt 是由某个人/某个人创建的,而且您必须使用这个文件,那么其他选项包括

awk '/^[-d].*[0-9]$/' file

Ruby (1.9 +)

ruby -ne 'print if /^[-d].*[0-9]$/' file

巴斯

while read -r line ; do  case $line in [-d]*[0-9] ) echo $line;  esac; done < file

应该注意的是,插入符号(^)不仅在方括号内的行为不同,而且将产生相反的结果,即将其置于方括号外。放置插入符号的位置将搜索所有字符串,而不是从放置在括号内的内容开始。您还需要在方括号之间放置一个星号之前的句点,就像 grep 一样,它也充当“通配符”。

grep ^[.rwx].*[0-9]$

This should work for you, I noticed that some posters used a character class in their expressions which is an effective method as well, but you were not using any in your original expression so I am trying to get one as close to yours as possible explaining every minor change along the way so that it is better understood. How can we learn otherwise?

这个问题有很多答案,我只是想再加一个,它使用了抨击-

#! /bin/bash
while read -r || [[ -n "$REPLY" ]]; do
[[ "$REPLY" =~ ^(-rwx|drwx).*[[:digit:]]+$ ]] && echo "Got one -> $REPLY"
done <"$1"

@ kurumi 是 bash 的回答,大小写也是正确的,但是如果文件末尾没有换行顺序,它就不会读取文件的最后一行(保存文件时不要在最后一行按“ Enter/Return”)。