草庐IT

menta-regex

全部标签

regex - 如何仅删除单个空行 - 保留多个空行

我有一些数据,我想保留多个空行并只删除单个空行。我的数据如下所示:12345678910我希望输出为:12345678910我已经尝试使用以下命令,但我似乎无法让它工作:awk'/^$/{print;}/./{printf("%s",$0);}'和sed'N;/^\n$/d;P;D'此外,我尝试使用cat-s但这不一定会删除空行。此外,我玩过sed'/^$/'但不能仅指定单行。任何帮助是极大的赞赏。 最佳答案 使用gnu-awk非常简单:awk-vRS='\n+''{printf"%s",$0(length(RT)!=2?RT:"\

regex - 在 Bash 中使用正则表达式和 x=${...} 重命名文件?

我有一堆文件,其中包含括号中的前缀代码。我想将这些前缀变成后缀,如下所示:Finance-(4BF)-001.doc-->Finance-001-4BF.docCorporate-(K04)-001.doc-->Corporate-001-K04.doc我以前写了一个非常简单的VBScript来在Windows机器上执行此操作,但现在我需要在Linux上执行此操作。经过一番繁琐的搜索后,我找不到一种简单而优雅的方法来将正则表达式应用于文件名并使用正则表达式匹配重命名它。到目前为止我有这个:#!/bin/bashforiin*.docdox=${i//[\(\)]/}echo"$iren

regex - awk/sed 在两个模式之间插入行

我有一个CNC机器的G代码文件,需要在模式之间插入两行。本质上我需要编写一个简单的后处理器。这是我的CAM程序中的一小段代码:G00X-1.663Y-0.992Z+0.G01X-1.072Y-0.992G01X-1.072Y-0.874G01X-1.663Y-0.874G01X-1.663Y-0.992G00X-3.021Y-0.992G01X-3.021Y-0.874G01X-2.43Y-0.874G01X-2.43Y-0.992G01X-3.021Y-0.992我需要按顺序在G00和G01之间插入两行。所以上面的例子现在变成了:G00X-1.663Y-0.992Z+0.M51M04

regex - 使用正则表达式搜索 127.0.0.1 以外的 IP 地址

使用命令行工具,我试图找到除127.0.0.1之外的任何IP地址并替换为新IP。我尝试使用sed:sed's/\([0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}\)\(?!127.0.0.1\)/'$ip'/g'file你能帮帮我吗? 最佳答案 由于sed不支持否定先行断言,我建议您使用Perl而不是sed。perl-pe's/\b(?:(?!127\.0\.0\.1)\d{1,3}(?:\.\d{1,3}){3})\b/'"$ip"'/g'file示例:$catfile122.54.23.121127

regex - 在具有以特定模式开头的第二行的两行之间插入行

我想在两行之间插入一行,只有当第二行匹配特定模式时例如输入文件如下:pattern(match1,line1)line2line3line4line5(beforepattern)pattern(match2,line5)line7line8line9line10(beforepattern)pattern(match3,line11)line12我想在line5和pattern之间以及line10和pattern之间插入lineToInsert我试过这个命令:sed'N;s/\n\(pattern\)/\n\lineToInsert\n\1/'我希望它能工作,但它只有在匹配的模式仅存

regex - 使用 sed 剪切部分 grep 输出

我需要从日志文件中获取值,值可能不同并且需要获取它。字符串示例:Testsrun:1042,Failures:0,Errors:0,Skipped:0我尝试:catlog.log|grep'^Testrun:'|sed-e's/^Testrun://'但我得到:1042,失败:0,错误:0,跳过:0我需要4个结果类似的命令第一个命令(测试运行)1042第二个命令(失败)0第三条命令(错误)0第四个逗号(跳过)0 最佳答案 您可以使用以下四个命令来获取Testsrun的值,Failures,Errors,和Skipped分别是:cat

regex - 在 grep 中转义斜杠 "\"

我有一行文件:"H:\Check\WP_20140511_029.mp4"与其他行一起。我想删除指示H:\Check目录的行。我试过了grep-v".*H:\\Check.*"testout.txt>testout2.txt但它并没有删除那些行。我的正则表达式.*H:\\Check.*有什么问题。regex101shows我的正则表达式正确匹配该行。 最佳答案 您可以使用:grep-v'H:\\Check'testout.txt>testout2.txt使用单引号以避免过度转义反斜杠很重要。使用双引号等效命令将是这样的:grep-v

regex - 如何使用 shell 脚本查找 Linux 发行版名称?

我正在编写一个shell脚本,我需要在其中使用当前操作系统名称才能使其通用。喜欢:if[$Operating_System=="CentOS"]thenecho"CentOS";#Dothiselif[$Operating_System=="Ubuntu"]thenecho"Ubuntu";#Dothatelseecho"UnsupportedOperatingSystem";fi这怎么可能?在lsb_release-a命令或其他命令上应用正则表达式?谢谢.. 最佳答案 $lsb_release-iDistributorID:Fed

regex - 如何使用awk忽略空行和注释行

我正在写这段代码:awk-F'=''!/^$/{arr[$1]=$2}END{for(xinarr){printx"="arr[x]}}'1.txt2.txt此代码忽略空行,但我也想忽略以#(注释)开头的行。知道如何添加多个模式吗? 最佳答案 将!/^$/改为!/^($|#)/或!/^($|[:space:]*#)/如果您想忽略#之前的空格。 关于regex-如何使用awk忽略空行和注释行,我们在StackOverflow上找到一个类似的问题: https:/

regex - sed 替换文件的倒数第二行

我想替换文件的倒数第二行,我知道$用于最后一行但不知道如何说第二行。parallel({ignore(FAILURE){build("Build2Test",BUILDFILE:"",WARFILE:"http://maven.example.com/130602.0.war",STUDY:"UK",BUG:"33323")}},)我想用}}替换}},简而言之我想删除,逗号但是这个文件有很多其他代码所以我不能使用模式匹配,我需要使用文件末尾的第二行。 最佳答案 以下应该有效(请注意,在某些系统上您可能需要删除所有评论):sed'1{