Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 提取匹配的正则表达式或删除匹配正则表达式以外的字符串_Regex_Perl_Extract - Fatal编程技术网

Regex 提取匹配的正则表达式或删除匹配正则表达式以外的字符串

Regex 提取匹配的正则表达式或删除匹配正则表达式以外的字符串,regex,perl,extract,Regex,Perl,Extract,我有一份档案 **data2.l** I have a car its nissan GTR this car is super fast 如果我想从这个文件中删除“car”这个词,我只需要使用 perl -p -i -e "s/car//ig" data2.l 但如果我想保留“car”并删除除“car”以外的所有其他术语 如果我试图提取“car”,我就能够提取包含“car”的完整行 那么,这一行可以稍微修改一下以完成这项任务吗?如果“car”一词在每一行上出现多次,这将实际打印两次,并

我有一份档案

**data2.l**
I have a car 
its nissan GTR 
this car is super fast
如果我想从这个文件中删除“car”这个词,我只需要使用

perl -p -i -e "s/car//ig" data2.l
但如果我想保留“car”并删除除“car”以外的所有其他术语 如果我试图提取“car”,我就能够提取包含“car”的完整行


那么,这一行可以稍微修改一下以完成这项任务吗?

如果“car”一词在每一行上出现多次,这将实际打印两次,并添加一个换行符结尾:

grep -io "car" file.txt
输入:

i have a car 
its nissan GTR 
this car is super fast Car
输出:

car
car
Car
更新:

grep -ioP "car[^ ]*" file.txt
输入:

i have a car 
its nissan GTR 
this car123 is super fast Car
输出:

car
car123
Car

如果“car”一词在每一行上出现多次,这将逐字打印两次,并添加一个换行结尾:

grep -io "car" file.txt
输入:

i have a car 
its nissan GTR 
this car is super fast Car
输出:

car
car
Car
更新:

grep -ioP "car[^ ]*" file.txt
输入:

i have a car 
its nissan GTR 
this car123 is super fast Car
输出:

car
car123
Car

这个Perl做了类似的事情,但是同一行上的所有“汽车”都在同一行上:

  perl -lne 'print join " ", /car\S*/ig if /car/i'
您可以从steve的示例中获得以下输出:

car
car123 Car

这个Perl做了类似的事情,但是同一行上的所有“汽车”都在同一行上:

  perl -lne 'print join " ", /car\S*/ig if /car/i'
您可以从steve的示例中获得以下输出:

car
car123 Car

我玩得很开心。所有这些选项将只打印一次car,即使它在文件中多次出现

more data2.1 | grep -q 'car' && echo 'car'

more dara2.1 | sed -n 'h;N;$x;$s/.*car.*/car/p'

perl -ne '$i=1 if ~~/car/}{print "car\n" if $i' data2.1

我玩得很开心。所有这些选项将只打印一次car,即使它在文件中多次出现

more data2.1 | grep -q 'car' && echo 'car'

more dara2.1 | sed -n 'h;N;$x;$s/.*car.*/car/p'

perl -ne '$i=1 if ~~/car/}{print "car\n" if $i' data2.1


如果“car”一词在每一行上出现多次怎么办?那么您希望您的输出是什么?打印两次。不管它重复多少次,我只想提取那个词。如果“car”这个词在每一行上出现多次会怎么样?那么您希望您的输出是什么?打印两次。不管它重复了多少次,我只想提取那个词。谢谢你的快速回复@steve。。我试图从您的解决方案的编辑输入中获取编辑输出。但我没有成功。因此,我如何修改以获得如您的解决方案所示的输出。也就是说,如果我的文件中有car123,我想将其与car123一起提取。我该怎么办it@unkaitha:请查看更新。它使用Perl正则表达式引擎匹配单词car和其后的任何内容,只要不是空格,就可以多次匹配。感谢@steve的快速响应。。我试图从您的解决方案的编辑输入中获取编辑输出。但我没有成功。因此,我如何修改以获得如您的解决方案所示的输出。也就是说,如果我的文件中有car123,我想将其与car123一起提取。我该怎么办it@unkaitha:请查看更新。它使用Perl正则表达式引擎匹配单词car和其后的任何内容,只要不是空格,就可以多次匹配。感谢@Mark的解决方案。。我试图修改您的解决方案,以获得输出为“car123”,如果它们存在一个名为“car123”的字符串。我只能设法把整条线提取出来。但不仅仅是“car123”我不太明白。所以,如果有一个单词包含“car”作为它的一部分,你想把整个单词打印出来吗?不仅仅是字符串“car”,也不是整行?是的,我要打印整个单词,而不是整行line@steve谢谢将否定的char类替换为perl非空白表达式
\S
。感谢@Mark提供的解决方案。。我试图修改您的解决方案,以获得输出为“car123”,如果它们存在一个名为“car123”的字符串。我只能设法把整条线提取出来。但不仅仅是“car123”我不太明白。所以,如果有一个单词包含“car”作为它的一部分,你想把整个单词打印出来吗?不仅仅是字符串“car”,也不是整行?是的,我要打印整个单词,而不是整行line@steve谢谢将否定的char类替换为perl非空白表达式
\S
。进一步检查后,似乎我提供的不是您想要的
perl-ne'@i=m/(car\S*)/g;$=“\n”;打印@i;打印“\n”if@i‘data2.1
可以。进一步检查后,我提供给您的似乎不是您想要的
perl-ne'@i=m/(car\S*)/g;$=“\n”;打印@i;打印“\n”if@i不过,data2.1可以做到这一点。