Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 sed命令替换模式&;(\n)终端不工作_Regex_Bash_Shell_Sed_Terminal - Fatal编程技术网

Regex sed命令替换模式&;(\n)终端不工作

Regex sed命令替换模式&;(\n)终端不工作,regex,bash,shell,sed,terminal,Regex,Bash,Shell,Sed,Terminal,试图替换以“\n”换行符结尾的特定图案,但似乎无法找到它。但我需要能够将结果通过管道传输到另一个命令,而该命令不在文件中 例如: $echo "test some text testing test some text testing test" | sed 's/ testing\n/|/g' | (more commands) 预期结果将是: test some text|test some text|test 我们在模式空间中查找与/testing/匹配的行,并使用N将下一行追加到模式

试图替换以“\n”换行符结尾的特定图案,但似乎无法找到它。但我需要能够将结果通过管道传输到另一个命令,而该命令不在文件中

例如:

$echo "test
some text testing
test
some text testing
test" | sed 's/ testing\n/|/g' | (more commands)
预期结果将是:

test
some text|test
some text|test
我们在模式空间中查找与
/testing/
匹配的行,并使用
N
将下一行追加到模式空间。这两行由
\n
分隔。然后,我们继续进行一个简单的替换,即删除
测试\n
并将其替换为


我们在模式空间中查找与
/testing/
匹配的行,并使用
N
将下一行追加到模式空间。这两行由
\n
分隔。然后,我们继续进行一个简单的替换,即删除
测试\n
并将其替换为

如果您愿意接受其他建议,您可以使用模式使用Perl one liner

$ echo "test
> some text testing
> test
> some text testing
> test" | perl -pe 's/ testing\n/|/g'

test
some text|test
some text|test

如果您愿意接受其他建议,那么可以使用模式使用Perl one liner

$ echo "test
> some text testing
> test
> some text testing
> test" | perl -pe 's/ testing\n/|/g'

test
some text|test
some text|test

这是多行sed的任务。这是多行sed的任务。尝试以下操作时出错…:
替换命令中的错误标志:'}'
@double\j看起来您在Mac上。放置一个
}
之前<代码>sed'/testing/{N;s/testing\N*/|/g;}'
。BSD
sed
需要一个
before
}
@ramgnu
sed
不会抱怨。BSD
sed
will.@double\u j检查更新。第一种模式是隔离线。第二种模式是去掉你不需要的部分。拉姆,我给你的答案加了一些解释。如果您觉得它已经彻底改变了它,请继续并还原它。@jaypal非常感谢您让答案变得更好,我正要添加一个解释,这正是我的想法。尝试以下操作时出错…:
替换命令中的错误标志:'}'
@double\u j看起来您在Mac上。放置一个
}
之前<代码>sed'/testing/{N;s/testing\N*/|/g;}'
。BSD
sed
需要一个
before
}
@ramgnu
sed
不会抱怨。BSD
sed
will.@double\u j检查更新。第一种模式是隔离线。第二种模式是去掉你不需要的部分。拉姆,我给你的答案加了一些解释。如果您觉得它已经彻底改变了它,请继续并还原它。@jaypal非常感谢您让答案变得更好,我正要添加一个解释,这正是我的想法。我选择@ram answer,因为他仍然在使用
sed
,但我也喜欢这个方法,可能会在其他地方使用它,谢谢!我选择@ram answer,因为他仍然在使用
sed
,但我也喜欢这种方法,可能会在其他地方使用,谢谢!