2014-09-24 309 views
0

尝试替换以“\ n”换行符结尾的特定模式,但似乎找不到它。但是我需要能够将结果传递给另一个命令,并且它不在文件中。sed命令替换模式&( 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 
+0

这是获得一个错误尝试的是... sed的用于多任务.. – Ram 2014-09-24 04:41:15

回答

3
echo "test 
some text testing 
test 
some text testing 
test" | sed '/testing/{N;s/ testing\n/|/;}' 

我们期待在我们的模式空间匹配/testing/线和追加使用N下一行模式空间。这两条线由\n分隔。然后,我们继续进行简单替换,即删除testing\n并用|替换它。

+0

:在替换命令'不良标识:“}”' – 2014-09-24 04:53:11

+0

@double_j看起来,你是在Mac上。在'}'之前放置';'。 'sed'/ testing/{N; s/testing \ n */|/g;}''。 BSD'sed'在'}'前面需要';'。 – 2014-09-24 04:55:45

+0

@double_j上面的代码适用于我,我只是复制并粘贴到终端, – Ram 2014-09-24 04:56:39

1

如果您愿意接受其他建议,可以使用Perl一行代码来使用您的模式。

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

test 
some text|test 
some text|test 
+0

我用@ram回答,因为他仍在使用'sed',但我也喜欢这种方法,并可能在别处使用它,谢谢! – 2014-09-24 05:05:49