2014-09-24 303 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