我想为\resources\. 我该怎么做呢?
我试过了:
grep \resources\
grep \\resources\\
grep "\resources\"
grep "\\resources\\"
Run Code Online (Sandbox Code Playgroud)
一般来说,正则表达式中的哪些字符需要转义?
例如,以下在语法上不正确:
echo '[]' | grep '[]'
grep: Unmatched [ or [^
Run Code Online (Sandbox Code Playgroud)
然而,这在语法上是正确的:
echo '[]' | grep '\[]'
[]
Run Code Online (Sandbox Code Playgroud)
是否有任何文档说明哪些字符应该在正则表达式中转义,哪些不应该?
添加新用户时,如何验证字符串?
我想有一个正则表达式。那个正则表达式是什么?
我在 Windows 上,但我想我的问题仍然正确地放在这里。
C:\Users\User>grep --version
GNU grep 2.6.3
C:\Users\User>sed --version
GNU sed version 4.2.1
Run Code Online (Sandbox Code Playgroud)
我注意到以下工作(输出here):
echo here | grep -E "\w+"
echo here | grep -E "[her]+"
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用(不输出任何内容):
echo here | grep -E "[\w]+"
Run Code Online (Sandbox Code Playgroud)
这再次执行(输出here):
echo here | grep -P "[\w]+"
Run Code Online (Sandbox Code Playgroud)
[\w]我认为这是 Perl 正则表达式特有的东西。那是对的吗?
所以,让我们谈谈sed。这有效(输出gone):
echo here | sed -r "s/\w+/gone/"
echo here | sed -r "s/[her]+/gone/"
Run Code Online (Sandbox Code Playgroud)
同样,这不会(输出here):
echo here | sed -r "s/[\w]+/gone/"
Run Code Online (Sandbox Code Playgroud)
现在,我如何为 sed 激活 Perl 正则表达式——有什么办法吗?
Collation order throughLC_COLLATE不仅定义了单个字符的排序顺序,还定义了字符范围的含义。或者是吗?考虑以下片段:
unset LANGUAGE LC_ALL
echo B | LC_COLLATE=en_US grep '[a-z]'
Run Code Online (Sandbox Code Playgroud)
直观地说,B不是 in [a-z],所以这不应该输出任何东西。这就是 Ubuntu 8.04 或 10.04 上发生的事情。但是在一些运行 Debian lenny 或挤压的机器上,B可以找到,因为范围a-z包括排序顺序之间a和z排序顺序中的所有内容,包括大写字母B到Z.
所有测试的系统都en_US生成了语言环境。我还尝试改变语言环境:在B上面匹配的机器上,{en_{AU,CA,GB,IE,US},fr_FR,it_IT,es_ES,de_DE}{iso8859-1,iso8859-15,utf-8}除了日语(任何可用的编码)和C/之外的每个可用语言环境(主要基于拉丁语:,还有中文语言环境)都会发生同样的情况POSIX。
当您超越 ASCII 时,字符范围在正则表达式中意味着什么?为什么一方面某些 Debian 安装与其他 Debian 安装和 Ubuntu 之间存在差异?其他系统的行为如何?谁是对的,谁应该报告错误?
(请注意,我特别询问字符范围的行为,例如[a-z]在en_US语言环境中,主要是在基于 GNU libc 的系统上。我不是在询问如何匹配小写字母或 ASCII 小写字母。)
在两台 Debian 机器上,一台B在[a-z],一台不在,输出LC_COLLATE=en_US …
我需要在一个大文档中找到特定的长度数字。我尝试为此使用正则表达式。例如,如果我需要搜索正好为 2 位的数字,我会使用\d\d(即 /d 两次后跟一个空格)。这很好用。
但是要找到 10 位数字,输入\d10 次实际上并不可行。
试过\d{2},说' E486:找不到模式:\d{2} '
有没有更快/更容易的方法来实现这一目标?
很多时候,当手动搜索文件时,有太多的评论让您眼花缭乱,您开始希望有一种方法可以让您只显示那些没有评论的行。
有没有办法用 cat 或其他工具跳过评论?我猜有一种方法,它涉及一个正则表达式。我希望它只是显示而不是实际删除任何行等。
注释采用# 形式,我使用 zsh 作为我的 xterm。
如何仅在括号之间匹配单词
输入 :
this is (test.com)
愿望输出:
test.com
可能的重复:
从脚本输出中删除控制字符(包括控制台代码/颜色)
我正在编写一个脚本来与我正在编写的程序一起工作。我正在尝试做的是使用另一个脚本评估多个客户端的完成程度。我的脚本几乎完全符合我的要求,但是有一些颜色常量插入到我的 XML 输出中,当我稍后将 XML 解析为 PHP 时,这些常量会搞砸。长话短说,我有一个我正在使用的 sed 表达式,它删除了颜色常量的第一部分,但它无法删除看起来像 ^[(B - 因此我的问题。
这是我正在使用的 sed 序列:
sed -r 's/\x1B\[([0-9]{1,3}((;[0-9]{1,3})*)?)?[m|K]//g'
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一个单独的 sed 序列我可以在之后运行以删除尾随序列。我试过使用
sed 's/\^\[\\(B//'
Run Code Online (Sandbox Code Playgroud)
但它似乎没有删除任何东西。我不一定需要答案,如果有人对 sed 和颜色代码有很好的指导,那也会非常有帮助。我用谷歌搜索了一下,但我找到的答案似乎只是去掉了颜色的开头部分。
谢谢你的帮助。
我一直在尝试创建一个 find 命令字符串,它将查找以数字 1-99 结尾的所有文件,但排除所有其他文件。
例如,我想找到myfile1 myfile99但不是myfile456而不是myfilebackup
我正在考虑的正则表达式是,myfile[1-9]{1,2}但我无法将其与 find 一起使用。
find . -regex '.*myfile[0-9]{1,2}'
或者
find . -iname 'myfile[0-9]{1,2}'
从我所见,它{1,2}是不起作用的部分。
(顺便说一句,你可以-name -regex互换使用吗?)
任何帮助表示赞赏。