首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用fswatch的Regex -不以".txt“结尾的排除文件

使用fswatch的Regex -不以".txt“结尾的排除文件
EN

Stack Overflow用户
提问于 2014-10-28 19:32:08
回答 4查看 2.8K关注 0票数 2

对于文件列表,我想要匹配那些不以.txt结尾的文件。我目前正在使用这个表达式:

代码语言:javascript
运行
复制
.*(txt$)|(html\.txt$)

,但我希望它能做相反的事情。

应该匹配:

代码语言:javascript
运行
复制
happiness.html
joy.png
fear.src

not match:

代码语言:javascript
运行
复制
madness.html.txt
excitement.txt

我想要这个,这样我就可以和fswatch成对使用了

代码语言:javascript
运行
复制
fswatch -0 -e 'regex here' . | xargs -0 -n 1 -I {} echo "{} has been changed"

问题是它似乎不起作用。

PS:我使用标签bash而不是fswatch,因为我没有足够的声誉点来创建它。抱歉的!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-10-28 19:39:32

由于问题被标记为bash,所以可能不支持查找头(grep -P除外),下面是一个不需要查找头的grep解决方案:

代码语言:javascript
运行
复制
grep -v '\.txt$' file
happiness.html
joy.png
fear.src

编辑:您可以使用这个xargs命令来避免匹配*.txt文件:

代码语言:javascript
运行
复制
xargs -0 -n 1 -I {} bash -c '[[ "{}" == *".txt" ]] && echo "{} has been changed"'
票数 1
EN

Stack Overflow用户

发布于 2014-10-28 19:34:00

尝试使用lookbehind,如下所示:

代码语言:javascript
运行
复制
.*$(?<!\.txt)

游行示威

基本上,只要最后4个字符不是".txt",这就匹配任何一行文本。

票数 3
EN

Stack Overflow用户

发布于 2014-10-28 19:34:47

为此,您可以使用“消极前瞻性”。

代码语言:javascript
运行
复制
^(?!.*\.txt).+$

现场演示

可以使用选项-P将此表达式与grep一起使用。

代码语言:javascript
运行
复制
grep -Po '^(?!.*\.txt).+$' file
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26616949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档