草庐IT

linux - sed : printing lines between two words only when one of the line matches a third word or any pattern

我知道sed使用以下命令从test.txt打印单词FOO和BAR之间的行sed-n'/FOO/,/BAR/p'test.txt但是我如何让sed仅在其中一行具有匹配模式时打印FOO和BAR之间的行例如,文件text.txt有以下几行:Error-Undefinedportline1line2UndefinedportinALU1line3Error-Undefinedportline4line5UndefinedportinLSUline6Error-Undefinedportline7line8UndefinedportinFGUline9Error-Undefinedportlin

linux - 用存储在sed变量中的文件内容替换两行之间的文本

假设我有一个名为original.txt的文件,内容如下:红色蓝色水食物树灰色白色我还有一个名为new.txt的文件,内容如下:绿色黑色黄色紫色现在我想编写一个脚本,用的内容替换original.txt中blue和gray之间的行new.txt,所以它给了我这个结果:红色蓝色绿色黑色黄色紫色灰色白色我写了这段代码(新文件的名称并不总是相同的,所以它存储在一个变量中):newtext="new.txt"sed-i"/blue/,/gray/{r$newtextd}"original.txt但是,当运行它时,我却得到了这些废话:redgreenblackyellowpurplegreenb

linux - 使用 SED/Perl 删除包含数字的字符串部分

我有一个看起来像这样的数据:AB208804_1446576AB208804_1orf0AB208804_20446576AB208804_20orf0我想将它们转换成这样:AB208804446576AB208804orf0AB208804446576AB208804orf0只需删除第1列和第4列中的_\digit部分。为什么这条线不起作用:sed's/_\d+//g'正确的做法是什么(单行)? 最佳答案 您需要-r开关和sed的字符类。$echo"AB208804_1446576AB208804_1orf0"|sed-r's/_

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

linux sed脚本使每个单词的首字母大写

我正在尝试制作一个sed脚本,它将成为每个字母的第一个字母mollyw.bolt334-78-5443walterq.bugg984-49-0032noahp.way887-12-0921所以我希望它看起来像这样:MollyW.Bolt334-78-5443WalterQ.Bugg984-49-0032NoahP.Way887-12-0921到目前为止,我有以下脚本,但它只会将遇到的前两个词大写,即。使它成为MollyW.bolt。我不知道如何修改脚本以使姓氏大写。我需要添加什么?hs/\(.\).*/\1/y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJ

linux - 如何使用 sed 或 awk 将两个文件的每一行组合在一起?

我有两个文件。文件A有一个单词列表,每行一个。文件B包含另一个巨大的单词列表,但有些很长。我将如何使用sed或awk从文件A中取出每一行并将其与文件B中不超过6个字符的每一行组合?理想情况下,它会将所有结果吐出到一个新文件中。例如:文件A:coolbeanssad文件B:armadillosnakebread新文件:coolsnakecoolbreadbeanssnakebeanbreadsadsnakesadbread 最佳答案 与您的输出顺序不同,但可能有用:awk'FNR==NR{words[$1]=1;next}FNR输出:

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

linux - 你能解释一下这个 sed 单行代码吗?

下面一行反序打印出文件内容$sed-n'1!G;h;$p'test.txtsed逐行读取文件怎么可能?能解释一下吗n标志1!Gh和$p在这个命令中? 最佳答案 这将完成与tac相同的工作,即恢复行的顺序。将sed脚本重写为伪代码,意思是:$line_number=1;foreach($inputin$input_lines){//currentinputlineisin$inputif($line_number!=1)//1!$input=$input+'\n'+$hold;//G$hold=$input;//h$line_numb

linux - 如何使用 grep、sed 和 awk 打印找到的模式后的下一个单词?

例如,假设我有logfile.txt其中包含“这是一个示例文本文件”我的模式是“sample”如何在我的logfile.txt中获得sample旁边的单词。 最佳答案 这是使用awk执行此操作的一种方法:$awk'{for(i=1;i解释:$awk'{for(i=1;i和sed:$sed-n's/.*sample\([^]*\).*/\1/p'filetextIE。之后sample下一个空格分隔的字符串和grep使用PCRE和正面看后面:$grep-oP'(?见前面的解释。 关于linu

linux - 这个sed命令是什么意思? sed 's%^.*/%%'

这个问题在这里已经有了答案:Usingdifferentdelimitersinsedcommandsandrangeaddresses(3个答案)关闭去年。我看到了一个bash命令sed's%^.*/%%'通常sed的通用语法是sed's/pattern/str/g',但在这个语法中它使用s%^.*作为s部分在's/pattern/str/g'中。我的问题:s%^.*是什么意思?sed's%^.*/%%'第二部分的%%是什么意思?