我有以下几行(实际上有~1M这些行):foo|||barqux||boo|fzx请注意,每行恰好包含4个字段,但字符数可以超过3个。我想要做的是用|nil|替换每个||结果:foo|nil|nil|barqux|nil|boo|fzx用sed有什么办法呢?我试过了但是失败了:sed's/||/|nil/g' 最佳答案 你需要重复替换直到它不改变:sed':a;s/||/|nil|/g;ta'但是这不会处理开头或结尾的空字段,为此您还需要两种模式:sed's/^|/nil|/;s/|$/|nil/;:a;s/||/|nil|/g;ta
我一直在学习如何在VIM中进行更复杂的搜索和替换功能,我遇到了这样一个用例::%s/$/|/g这应该会找到每行的结尾并将其替换为垂直管道。不过,当我第一次学习这个时,我假设您必须在替换字符串中添加行尾字符以获得预期的结果。即,:%s/$/|$/g为什么在没有它的情况下它仍然可以工作并且仍然保留换行符?它不应该用您的字符串替换该行的终止字符并在此过程中将其删除吗?可以用行首字符^询问同样的事情。 最佳答案 anchor$不包含换行符。事实上,它是一个零宽度标记。它匹配字符串中第一个换行符之前的空字符。因此结果。同样,^匹配字符串中第一
我一直在学习如何在VIM中进行更复杂的搜索和替换功能,我遇到了这样一个用例::%s/$/|/g这应该会找到每行的结尾并将其替换为垂直管道。不过,当我第一次学习这个时,我假设您必须在替换字符串中添加行尾字符以获得预期的结果。即,:%s/$/|$/g为什么在没有它的情况下它仍然可以工作并且仍然保留换行符?它不应该用您的字符串替换该行的终止字符并在此过程中将其删除吗?可以用行首字符^询问同样的事情。 最佳答案 anchor$不包含换行符。事实上,它是一个零宽度标记。它匹配字符串中第一个换行符之前的空字符。因此结果。同样,^匹配字符串中第一
我正在尝试创建一个替换所有“.”的脚本。在带有“_”的文件名中出现。例如,当我尝试替换我使用的所有“”符号时:rename'y//_/''{}'file#test1.2.jpg->test_1.2.jpg这很好用,但是当我尝试用“.”来做的时候符号扩展名也发生变化:rename'y/./_/''{}'file#test1.2.jpg->test1_2_jpg如何在不更改扩展名的情况下重命名文件(如果有)? 最佳答案 您可以使用前瞻来替换最后一个点之前的所有点:rename's/\.(?=[^.]*\.)/_/g''{}'或使用否定前
我正在尝试创建一个替换所有“.”的脚本。在带有“_”的文件名中出现。例如,当我尝试替换我使用的所有“”符号时:rename'y//_/''{}'file#test1.2.jpg->test_1.2.jpg这很好用,但是当我尝试用“.”来做的时候符号扩展名也发生变化:rename'y/./_/''{}'file#test1.2.jpg->test1_2_jpg如何在不更改扩展名的情况下重命名文件(如果有)? 最佳答案 您可以使用前瞻来替换最后一个点之前的所有点:rename's/\.(?=[^.]*\.)/_/g''{}'或使用否定前
我需要一种方法来匹配目录中的文件名。例如我有三个文件:CAt_DoG_ZebRa.TXTMOUSE_lion_deer_BIRD.TXTfIsh_biRD_LION.TXT无论如何我都不是正则表达式专家,但是我之前在SnapLogic和Pentaho中使用过类似的东西:(?i).*(?=.*bird)(?=.*lion).*.TXT以上将匹配所有包含单词“bird”和“lion”的文件名,忽略大小写并且单词的顺序无关紧要。很强大!所以它会匹配这两个:MOUSE_lion_deer_BIRD.TXTfIsh_biRD_LION.TXT我结合find和grep尝试了上述的许多变体,但都无济
我需要一种方法来匹配目录中的文件名。例如我有三个文件:CAt_DoG_ZebRa.TXTMOUSE_lion_deer_BIRD.TXTfIsh_biRD_LION.TXT无论如何我都不是正则表达式专家,但是我之前在SnapLogic和Pentaho中使用过类似的东西:(?i).*(?=.*bird)(?=.*lion).*.TXT以上将匹配所有包含单词“bird”和“lion”的文件名,忽略大小写并且单词的顺序无关紧要。很强大!所以它会匹配这两个:MOUSE_lion_deer_BIRD.TXTfIsh_biRD_LION.TXT我结合find和grep尝试了上述的许多变体,但都无济
所以我对这个主题做了一些研究,但我没有找到完美的解决方案。例如,我在变量中有一个字符串。var="a1b1c2"现在我想做的是只匹配“a”后跟任何数字,但我只希望它返回“a”之后的数字匹配它的规则如'a\d'因为我只需要数字,所以我尝试了'a(\d)'也许它确实在某个地方捕获了它,但我不知道在哪里,这里的输出仍然是“a1”我还尝试了一个非捕获组来忽略输出中的“a”,但在perl正则表达式中没有效果:'(?:a)\d'作为引用,这是我终端中的完整命令:[root@host~]#var="a1b1c2"[root@host~]#echo$var|grep-oP"a(\d)"a1可能没有-P
所以我对这个主题做了一些研究,但我没有找到完美的解决方案。例如,我在变量中有一个字符串。var="a1b1c2"现在我想做的是只匹配“a”后跟任何数字,但我只希望它返回“a”之后的数字匹配它的规则如'a\d'因为我只需要数字,所以我尝试了'a(\d)'也许它确实在某个地方捕获了它,但我不知道在哪里,这里的输出仍然是“a1”我还尝试了一个非捕获组来忽略输出中的“a”,但在perl正则表达式中没有效果:'(?:a)\d'作为引用,这是我终端中的完整命令:[root@host~]#var="a1b1c2"[root@host~]#echo$var|grep-oP"a(\d)"a1可能没有-P
使用以下示例,我需要过滤掉仅包含“ABC”的行,同时跳过匹配“ABC”且包含方括号的行:2012-04-0404:13:48,760~sample1~ABC[TLE5332.2332/13/20323320392]:CAST2012-04-0404:13:48,761~sample2~ABC2012-04-0404:13:48,761~sample3~XYZ[BAC.CAD.ABC.CLONE232511]:TEST这是我所拥有的,但到目前为止我无法成功过滤掉带有方括号的行:bash-3.00$catMetrics.log|grep-e'[^\[\]]'|grep-i'ABC'请帮忙?