Questions tagged «regular-expression»

正则表达式是匹配字符串中字符模式的一种方式。

4
如何在文件中为此(两件事)grep?
我有一个带有“ then”和“ there”的文件。 我可以 $ grep "then " x.x x and then some x and then some x and then some x and then some 我可以 $ grep "there " x.x If there is no blob none some will be created 如何在一次操作中同时搜索两者?我试过了 $ grep (then|there) x.x -bash:意外令牌'('附近的语法错误 和 grep "(then|there)" …


4
Vim-如何用两个\ n替换一个新行\ n
在vim编辑器中,我想使用vim命令模式将换行符(\ n)替换为两个换行符(\ n \ n)。 输入文件内容: This is my first line. This is second line. 我尝试过的命令: :%s/\n/\n\n/g 它将字符串替换为不需要的字符,因为 This is my first line.^@^@This is second line.^@^@ 然后我尝试了以下命令 :%s/\n/\r\r/g 它工作正常。您能解释一下为什么第二条命令可以正常工作吗?

2
grep和转义一个美元符号
我想知道哪些文件具有字符串$Id$。 grep \$Id\$ my_dir/mylist_of_files 返回0次。 我发现我必须使用 grep \$Id$ my_dir/mylist_of_files 然后,我看到$Id输出中有,即已被匹配。 我怎么能匹配第二$,为什么不\$Id\$工作。 第二$个字符是否不是最后一个字符都没有关系。 我使用grep2.9。 在发布我的问题之前,我使用过Google ... 我找到了答案 要在名为test2的文件中搜索$(美元符号),请输入: grep \\ $ test2 为了强制外壳程序将\ $(单个反斜杠,美元符号)传递给grep命令,必须使用\\(双反斜杠)字符。\(单反斜杠)字符告诉grep命令将以下字符(在本示例中为$)视为文字字符而不是表达式字符。使用fgrep命令可避免使用转义字符(例如反斜杠)的必要性。 但我不明白grep \$Id为什么grep \\$Id\\$可行,为什么不可行。 我有点困惑...

6
检查输入数字是否为整数
我正在尝试检查输入是否为整数,并且已经遍历了一百次,但是没有看到错误。las,它不起作用,它会触发所有输入(数字/字母)的if语句 read scale if ! [[ "$scale" =~ "^[0-9]+$" ]] then echo "Sorry integers only" fi 我玩过引号,但要么错过了它,要么什么都没做。我做错了什么?有没有更简单的方法来测试输入是否仅仅是INTEGER?

3
使用VIM进行替换,重用部分搜索模式
我正在使用VIm并尝试设置搜索和替换命令以进行一些替换,在这些替换中我可以重新使用属于搜索字符串的正则表达式。 一个简单的示例是我要替换(10)为的行{10},其中10可以是任何数字。 我走了这么远 .s/([0-9]*)/what here??/ 完全符合我想要的部分。 现在更换,我尝试 .s/([0-9]*)/{\0}/ 但是,这给出了输出 {(10)} 然后,我尝试 .s/(\zs[0-9]*\ze)/{\0}/ 但是,这给了我({10}),我也关闭了,但不是我想要的。 我想我需要其他某种标记/反向引用来代替\0,但是我不知道在哪里看。所以问题是,这可以在vim中完成吗?


2
LC_COLLATE是否(应该)影响字符范围?
整理顺序LC_COLLATE不仅定义了各个字符的排序顺序,而且还定义了字符范围的含义。还是呢?考虑以下代码段: unset LANGUAGE LC_ALL echo B | LC_COLLATE=en_US grep '[a-z]' 直观上,Bnot in中[a-z],因此不应输出任何内容。这就是在Ubuntu 8.04或10.04上发生的情况。但是,在某些运行Debian lenny或squeeze的计算机上,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 locale -k LC_COLLATE就是 collate-nrules=4 collate-rulesets="" collate-symb-hash-sizemb=1 collate-codeset="ISO-8859-1" 和的输出LC_COLLATE=en_US.utf8 locale -k LC_COLLATE是 collate-nrules=4 collate-rulesets="" collate-symb-hash-sizemb=2039 collate-codeset="UTF-8"

11
是否必须有更好的方法来仅替换单个换行符?
我习惯每句只写一行,因为我通常将内容编译为LaTex,或者以其他格式书写而忽略了换行符。我使用空白行指示新段落的开始。 现在,我有一个以这种风格编写的文件,我想将其作为纯文本发送。我想删除所有单个换行符,但完整保留两个换行符。这是我所做的: sed 's/$^/NEWLINE/' file.txt | awk '{printf "%s ",$0}' | sed 's/NEWLINE/\n\n/g' > linebreakfile.txt 这用一些我相信不会出现在文件中的文本替换空行:NEWLINE然后用awk消除了所有换行符(我在某些网站上发现了这个技巧),然后NEWLINE用必需的两个换行符替换了s 。 这似乎是完成一件非常简单的事情的漫长方法。有没有更简单的方法?另外,如果有一种方法可以用单个空格替换多个空格(有时由于某种原因有时会蔓延),那也很好。 我使用emacs,所以如果有一些emacs特定的技巧很好,但我宁愿看到一个纯sed或纯awk版本。

7
如何在包括它们的两个模式之间选择首次出现
如何在包括它们的两个模式之间选择首次出现。最好使用sed或awk。 我有: text something P1 something content1 content2 something P2 something text something P1 something content3 content4 something P2 something text 我想第一次出现P1和P2之间的线(包括P1线和P2线): something P1 something content1 content2 something P2 something

3
如何在sed的正则表达式中使用[\ w] +?
我在Windows上,但我想我的问题仍然正确地放在这里。 C:\Users\User>grep --version GNU grep 2.6.3 C:\Users\User>sed --version GNU sed version 4.2.1 我注意到以下工作原理(输出here): echo here | grep -E "\w+" echo here | grep -E "[her]+" 但是,这不起作用(不输出任何内容): echo here | grep -E "[\w]+" 再次这样做(输出here): echo here | grep -P "[\w]+" 我想这[\w]是Perl正则表达式特有的。那是对的吗? 所以,让我们谈谈sed。这有效(输出gone): echo here | sed -r "s/\w+/gone/" echo here | …

9
如何跨多行“ grep”模式?
看来我在滥用grep/ egrep。 我试图在多行中搜索字符串,但找不到匹配项,但我知道我要查找的内容应该匹配。最初我以为我的正则表达式是错误的,但最终我读到这些工具是按行运行的(而且我的正则表达式太琐碎了,不可能成为问题)。 那么,将使用哪种工具来搜索多行模式?

6
所有10个字母词的正则表达式,带有唯一字母
我正在尝试编写一个正则表达式,以显示所有10个字符长的单词,并且所有字母都没有重复。 到目前为止,我已经 grep --colour -Eow '(\w{10})' 这是问题的第一部分。我将如何检查“唯一性”?除了需要使用反向引用之外,我真的没有任何线索。

5
在正则表达式中,哪些字符需要转义?
通常,正则表达式中的哪些字符需要转义? 例如,以下语法不正确: echo '[]' | grep '[]' grep: Unmatched [ or [^ 但是,在语法上这是正确的: echo '[]' | grep '\[]' [] 是否有任何文档说明哪些字符应在正则表达式中转义,哪些不应该?

5
vim搜索编号包含特定位数
我需要在一个大文件中找到特定的长度数字。我试图为此使用正则表达式。例如,如果我需要搜索精确的2位数字,则使用\d\d(即/ d两次,后跟一个空格)。这很好。 但是要找到10位数字,实际上不可能输入\d10次​​。 尝试过\d{2},说“ E486:找不到模式:\ d {2} ” 有没有更快/更简便的方法来实现这一目标?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.