我正在尝试从修改后的以制表符分隔的ApacheWeb访问日志条目中解析文件名:/common/common/img/pictos/klArrowRight.gif/common/common/img/pictos/klArrowRight.gif03/Dec/2012:00:00:00127.0.0.103/Dec/2012:00:00:00us404我希望它是这样出来的:klArrowRight.gif/common/common/img/pictos/klArrowRight.gif03/Dec/2012:00:00:00127.0.0.103/Dec/2012:00:00:00u
鉴于此数据34foo34bar34qux62foo162qux78qux如果它是“qux”,我想将第2列的字符串替换为“”。结果:34foo34bar3462foo16278如何使用sed做到这一点?特别是数据非常大,有~10^7行 最佳答案 我不会实际上用sed来做,因为那不是完成这项工作的最佳工具。每当有人提到列时,awk工具就是我的首选工具。catfile|awk'$2=="qux"{print$1}$2!="qux"{print$0}'或最简单的形式:catfile|awk'{if($2=="qux"){$2=""};pri
使用我的shell脚本,当我运行./Test1helloresult.它应该占用hello作为标准输入,结果作为标准输出。shell应该删除之前的所有空格,,和abc所以,我这样写脚本tr-d[:blank:]"$1|sed-r's///g'>$2sed-r's///g'$2sed-r's/abc//g'$2但是,当我运行这条命令时,结果文件的内容与hello文件的内容完全一样(唯一的区别是去掉了空格)文件内容:hellohellohelloabcabc我如何获得sed将更改应用到目标文件? 最佳答案 如果要存储来自sed的更改返回
我正在尝试编写一个简短的脚本,在其中我使用sed搜索流,然后根据shell函数的结果对流执行替换,这需要来自sed的参数,例如#!/bin/shfunctiontest{echo"runningtest"echo$1}sed-n-e"s/.*\(00\).*/$(test)/p"其中testfile.txt包含:1234234530064567(每个之间有换行符;它们会被您的网站格式删除)。好吧,脚本对我有用(输出“运行测试”),但显然没有参数传递给测试。我希望sed行是这样的:sed-n-e"s/.*\(00\).*/$(test\1)/p"和输出:runningtest00因此se
使用sed,如果文件中的一行有一个空格字符,我需要打印包含空格字符和删除后的任何内容的输出。代码示例:sed"s/"somethinghereIthink"//g'file所以,假设一个文件在一行中这样说:ChuckNorrisistheman我只需要它来打印:Chuck多行也适用:ChuckNorrisisthemanSoisArnold替换:ChuckSo 最佳答案 这应该为你做:sed's/.*//g'file要从行首删除到第一个空格,请使用:sed's/^[^]*//g' 关于l
我正在尝试编写一个sed命令来用环境变量中的值替换文件中的标记,如下所示:exportmy_var=fooecho'something{{my_var}}bar'|sed-r"s/\{\{(.*?)\}\}/$\1/g"我想获取token的名称(在本例中为my_var),然后替换为具有相同名称的环境变量的值。这可能吗?当前上面打印的是something$my_varbar而不是我想要的somethingfoobar。如果sed无法实现,我愿意使用其他工具,例如awk。 最佳答案 将{{my_var}}替换为$my_var后,您需要显
我正在尝试替换多行中的字符串。已经很晚了,我变得焦躁不安,也许有人更愿意试一试以获得一些SO点。我要替换的字符串是来自以下SQL的“STOREDASTEXTFILE”...PARTITIONEDBY(loadstring,datestring,source_filestring)STOREDASTEXTFILELOCATION'${staging_directory}/${tablename}';让它看起来像...PARTITIONEDBY(loadstring,datestring,source_filestring)ROWFORMATDELIMITEDFIELDSTERMINATE
我有一个名为“a6s”的文本文件,其中包含多行,如下所示:ynyyynyyyyyyyyyyn我使用了这个脚本:$sed-i"s/y$^y/ya\ny/g"a6s;我想在最后一行结尾和下一行开头的两个“y”字符之间插入输出:ynyyynyayyyayyayayyyn 最佳答案 使用GNUsed(这个伟大的解决方案完全归功于@Sundeep,谢谢):sed-i'/y$/{N;s/y\ny/ya\ny/;P;D}'a6s为了使用sed在多行上工作,您必须使用N、P和D命令:{cmds}:命令组/y$/{cmds}:仅当行以y结尾时才执行命
我发布了thisquestion有人用这个回答sed'/^void.*{$/!b;:a;/\n}$/bb;$!{N;ba};:b;s/\n/&test1&/;s/\(.*\n\)\(.*\n\)/\1test2\n\2/'文件我是sed和正则表达式的新手,无法理解每个部分的功能。我会尝试解释我所理解的,你们可以填补缺失的东西。我将逐个字符地进行^void.*{$--这意味着任何以void开头并以{结尾的内容/!b;我不明白这是做什么的。现在b用于分支。/在那里做什么:a;用于制作标签a/\n还是没看懂/那里}$以结尾/bb我不明白$!表示如果不是文件结尾{N;没明白是什么意思,N的意思
我可以替换字符串中的文本,但一旦我尝试输入数字,它就无法匹配。注意[0-9]\+\是导致问题的原因。这个有效:sed-i""-e"s/mySite-.js/mySite$current_timestamp.js/"template.php这不是:sed-i""-e"s/mySite-[0-9]\+\.js/mySite$current_timestamp.js/"template.php我很抱歉问thisquestionearlier但是我在这个愚蠢的事情上花了将近一整天,我快要疯了。 最佳答案 请考虑包含示例数据和预期输出。如果您