UNIX:查找行

UNIX: Finding lines

我需要编写一个小脚本,它根据正则表达式(例如“^folder#”)查找行,并在匹配的地方写入行数。

我的想法是,我将使用 "find",然后删除所有斜杠,然后使用带有正则表达式的 grep。 我不知道为什么它不起作用。你能给我一些建议如何改进,或者我应该如何找到与另一个功能的线路?

./example
./folder/.DS_Store
./folder/file.png

出来

2: ./folder/.DS_Store
3: ./folder/file.png

IGN="^folder$"

find . -type f | sed -e "s/\// /g" | grep -n "${IGN}"

你说你想使用 ^folder$ 模式,但你想得到如下输出:

2: ./folder/.DS_Store
3: ./folder/file.png

这两个要求相互矛盾。像 ./folder/.DS_Store 这样的行无法匹配模式 ^folder$,因为该行不是以 "folder" 开头,也不以 "folder".

结尾

要获得您描述的输出,您需要将与 grep 一起使用的模式更改为 ^\./folder/

你试过了

IGN="^folder$"
find . -type f | sed -e "s/\// /g" | grep -n "${IGN}"

此脚本无效,因为 IGN 寻找行首,而不是字首。
您可以使用

从路径的各个部分制作线条
IGN="^folder$"
find . -type f | tr -s "/" "\n" | grep -n "${IGN}"