对于文件列表,我想要匹配那些不以.txt
结尾的文件。我目前正在使用这个表达式:
.*(txt$)|(html\.txt$)
,但我希望它能做相反的事情。
应该匹配:
happiness.html
joy.png
fear.src
not match:
madness.html.txt
excitement.txt
我想要这个,这样我就可以和fswatch成对使用了
fswatch -0 -e 'regex here' . | xargs -0 -n 1 -I {} echo "{} has been changed"
问题是它似乎不起作用。
PS:我使用标签bash而不是fswatch,因为我没有足够的声誉点来创建它。抱歉的!
发布于 2014-10-28 19:39:32
由于问题被标记为bash
,所以可能不支持查找头(grep -P
除外),下面是一个不需要查找头的grep
解决方案:
grep -v '\.txt$' file
happiness.html
joy.png
fear.src
编辑:您可以使用这个xargs
命令来避免匹配*.txt
文件:
xargs -0 -n 1 -I {} bash -c '[[ "{}" == *".txt" ]] && echo "{} has been changed"'
发布于 2014-10-28 19:34:00
尝试使用lookbehind,如下所示:
.*$(?<!\.txt)
游行示威
基本上,只要最后4个字符不是".txt"
,这就匹配任何一行文本。
发布于 2014-10-28 19:34:47
为此,您可以使用“消极前瞻性”。
^(?!.*\.txt).+$
现场演示
可以使用选项-P
将此表达式与grep一起使用。
grep -Po '^(?!.*\.txt).+$' file
https://stackoverflow.com/questions/26616949
复制相似问题