UNIX:查找行

时间:2016-03-25 20:06:33

标签: regex bash unix ksh

我需要编写一个小脚本,它根据正则表达式查找行(例如“^ 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}"

2 个答案:

答案 0 :(得分:1)

您说您想要使用^folder$模式,但您希望得到如下输出:

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

这两个请求相互矛盾。像./folder/.DS_Store这样的行无法匹配模式^folder$,因为该行不以“文件夹”开头,也不以“文件夹”结尾。

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

答案 1 :(得分:0)

你试过

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

这个脚本不起作用,因为IGN寻找行首,而不是单词开头。
您可以使用

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