【问题标题】:Regex in grep -E not working as expectedgrep -E 中的正则表达式未按预期工作
【发布时间】:2012-02-06 19:08:10
【问题描述】:

我正在编写一个 bash shell 脚本,该脚本遍历一个文件夹并最终根据文件名创建新目录。 现在我想浏览每个文件并去掉不需要的路径斜杠并在创建新目录之前忽略文件扩展名。 为了测试这一点,我正在像这样回显我的文件:

#!/bin/sh

cpath=`pwd`
for file in $cpath/*;do
echo $file | grep -E '(?!.*/).+(?=\.)'
done

但是 grep 过滤掉所有内容,我没有得到任何输出。我用 RegExr http://gskinner.com/RegExr/?2vu6b
制定了正则表达式 负前瞻匹配最后一个斜杠,正前瞻匹配最后一个点。

【问题讨论】:

    标签: regex bash shell grep


    【解决方案1】:

    我不确定 Negative lookahead 是否是 Extended RE 的一部分。但是你可以做这样的事情 -

    #!/bin/bash
    
    for file in $PWD/*; do
    basename "${file%.*}"
    done 
    

    【讨论】:

    • 你甚至不需要echo
    • 也可以只做for file in $PWD/*; do
    • @SiegeX 是的!那将是正确的做法。我会更新答案。
    • lookaheads/lookbehinds 不是 ERE 的一部分。它在 PCRE 中可用,因此 grep -P 可以在 GNU grep 中使用。
    • 感谢额外的 cmets。很高兴知道我可以使用环视以供以后使用。
    猜你喜欢
    • 2022-01-02
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多