【问题标题】:UNIX: Finding linesUNIX:查找行
【发布时间】:2016-03-25 20:06:33
【问题描述】:

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

我的想法是,我将使用“查找”,然后删除所有斜线,然后使用带有正则表达式的 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}"

【问题讨论】:

  • 为什么要删除斜线?也许wc 是您正在寻找的,请检查-l 选项。
  • 你不想要 "^folder$" 。试试IGN="folder" 或者是超级明确的,试试="/folder/"。祝你好运。
  • 好吧,因为我认为“^folder#”的意思是在那个词之前和之后什么都不是——这就是我使用空格的原因。
  • shellter:这是一项任务,我需要使用“^folder$”找到一个文件夹。 :)
  • ^ 表示“行首”,$ 表示“行尾”。 # 仅表示“#”。

标签: regex bash unix ksh


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    你试过了

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

    此脚本不起作用,因为 IGN 查找的是行首,而不是词首。
    您可以使用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 2011-12-16
      • 2012-01-11
      • 2010-10-08
      • 1970-01-01
      相关资源
      最近更新 更多