Articles of 正则expression式

在Linux下replace文件中的自定义string

我故意在这里发布这个问题,虽然 – 对于我的情况 – 这是laTex相关的。 问题本身虽然是通用的。 我有几个*.tex源文件包含图像的引用,例如image1.jpg和image2.png 。 我想search所有的源文件的指定扩展集(在这种情况下, JPG和PNG ),并将其replace为他们的PDF对应。 因此,我想结束引用image2.pdf和image2.pdf 。 使问题复杂化,我有一个20个文件(image3.jpg,image 4.png等)的列表,我不想改变。 有没有一个简单的解决scheme(基于sed或任何工具的build议?),这可能有帮助? 虽然我不是正则expression式的大师 ;)

GREP和REGEX有问题

我有一个文本文件,以下列格式存储四个数字的组合: Num1,Num2,Num3,Num4 Num5,Num6,Num7,Num8 …………. 我有一大堆这样的文件,我需要的是grep包含上述模式的所有文件名。 我构build我的grep如下: grep -l "{d+},{d+},{d+},{d+}" /some/path/to/file/name grep终止而不返回任何东西。 有人可以指出我的grep语句可能会有什么问题吗? 谢谢

正则expression式grep,find$ tring和$ _tring里面的函数()

在我的debian机器上,我正在玩一些代码和正则expression式。 所以无论如何,我正在寻找在一些代码文件中find以下模式: function(some text $tring||$_string) 目前我正在使用以下命令 find . -type f | xargs grep "function" 我试过使用 find . -type f | xargs grep "function(*$string||$_tring*)" 但它没有工作。 本质上它需要search符合以下规则的所有模式 包括函数() 内部函数,匹配以下任一string $ string或 $ _tring 我该怎么做呢?

如何检查一个string是否至less有一个字母字符?

我想检查一个string是否至less有一个字母字符? 正则expression式可能是这样的: "^.*[a-zA-Z].*$" 然而,我想判断一个string是否至less有一个字母字符? 所以我想用,就像 if [ it contains at least one alphabetic character];then … else … fi 所以我不知道如何使用正则expression式 我试过了 if [ "$x"=~[a-zA-Z]+ ];then echo "yes"; else echo "no" ;fi or if [ "$x"=~"^.*[a-zA-Z].*$" ];then echo "yes"; else echo "no" ;fi 并用x =“1234”进行testing,以上两个脚本输出的结果都是“是”,所以是错的 如何实现我的目标?谢谢!

查找没有指定字符的文件名

是否有一个很好的regex来查找所有不包含特定字符的文件? 我知道有很多可以find包含匹配的行,但我想要find所有不包含我匹配的文件的东西。

sed – replace几个连续的行匹配模式

我正在尝试用文本replace文件中的两个连续行。 例如: testfile.rb class Test def procedure nil end end 我正在努力实现这一点: testfile.rb class Test def procedure nil finish finish 所以我需要更换最后2行,但这是行不通的: sed -i 's/^\s\send\nend/ finish\nfinish/' testfile.rb 我知道这是失败的,因为replace是一行一行的。 但是我怎么能这样做呢?

使用sed在单引号之间提取string

我有一千个delphi文件(.pas),我需要从中提取文本。 我需要的文本是单引号(帕斯卡string)之间,我只需要从一个特定的函数调用的string。 例如:my_function('这是我需要的string') 我已经提取了所有出现函数并添加到文本文件,使用find和grep,但我无法提取string的行。 我一直在环顾networking正则expression式提取这个string,但我不知道如何做到这一点。 我正在尝试这个: sed "s/.*my_function\('(.*)'\).*/\1/" all_the_strings.txt > my_out_file.txt 但它不起作用(我不是正则expression式的专家…)。 你能帮我吗?

在grep中支持正则expression式转义序列

我试图用\s来指定grep正则expression式中的空格 ,但似乎grep不能识别它。 grep -E或者egrep也egrep 。 这是我的试炼: $ echo ' foo' | grep '^ *foo' foo $ echo ' foo' | grep '^\s*foo' <– **No Output** $ echo ' foo' | grep -E '^\s*foo' <– **No Output** $ echo ' foo' | egrep '^\s*foo' <– **No Output** $ echo ' foo' | grep '^[[:space:]]*foo' foo 我也注意到它识别\w但不是\d […]

在linux下的c + + 11的正则expression式的奇怪的行为

我在这里坐了近一天,不知道为什么C ++ 11正则expression式库给了我它的输出。 这不是寻找模式,我已经devise和testing了在那里的各种正则expression式testing。 (例如Regexpal ) 我想要处理的示例string是: if12b031, if12b141, ic12a042 这些是用户名,包含字母和数字,最多8个字符,每个用户名用逗号分隔。 该string由用户input,不得以逗号结尾。 逗号之间的空格是可选的。 这种模式是我解决这个问题的方法: ^[A-z0-9]{1,8}(\s*,\s*[A-z0-9]{1,8})*$ 在这里,用户必须至lessinput一个用户名,但只要用逗号分隔,并且最多可以input8个字符,就可以input尽可能多的用户名。 现在,这个模式是有效的,如果我在上面提到的正则expression式testing中testing它的话。 但它不在我的代码中。 我创build了一个小例子程序,它只是关于模式testing。 #include <regex> #include <string> #include <iostream> using namespace std; int main(int argc, char const *argv[]) { string tmp; string pattern = "^[A-z0-9]{1,8}(\\s*,\\s*[A-z0-9]{1,8})*$"; while(true) { getline(cin, tmp); cout << "input: " << tmp << endl; cout << […]

如何重命名文件夹中的所有文件,删除linux中的空格字符后的一切?

你好,我不能正常使用正常的expression式,它是整天在互联网上search。 我有一个很多图片的文件夹: 50912000 Bicchiere.jpg 50913714 Sottobottiglia Bernini.jpg 我正在使用Mac OS X,但是我也可以尝试在Ubuntu上,我想为bash创build一个脚本,在第一个空间之后删除所有的字符,以获得如下解决scheme: 50912000.jpg 50913714.jpg 对于文件夹中的所有文件。 任何帮助表示赞赏。 问候