对于文件列表,我想要匹配那些不以.txt结尾的文件。我目前正在使用这个表达式:
.*(txt$)|(html\.txt$),但我希望它能做相反的事情。
应该匹配:
happiness.html
joy.png
fear.srcnot 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).+$' filehttps://stackoverflow.com/questions/26616949
复制相似问题