2013-01-18 19 views
10

我需要在sed中使用命令的輸出作爲搜索模式。我將使用回聲做出了榜樣,但認爲可能是一個更復雜的命令:如何在搜索模式中使用xargs和sed

echo "some pattern" | xargs sed -i 's/{}/replacement/g' file.txt 

該命令不起作用,因爲「某種模式」有一個空白,但我認爲這清楚地說明我的問題。

我該如何使命令起作用?

由於提前,

回答

6

使用命令替換而不是,所以你的例子看起來像:

sed -i "s/$(echo "some pattern")/replacement/g" file.txt 

雙引號允許命令替換,同時防止空間被拆分工作。

10

您需要告訴xargs要用-I開關替換什麼 - 至少在某些版本中,它似乎不會自動了解{}。

echo "pattern" | xargs -I '{}' sed -i 's/{}/replacement/g' file.txt 
+1

謝謝!你讓我今天一整天都感覺很好! :) – harrison4

0

這可能爲你工作(GNU SED):

echo "some pattern" | sed 's|.*|s/&/replacement/g|' | sed -f - -i file.txt 

實質上打開some pattern成一個sed命令,並通過管喂到另一個SED調用。最後的sed調用使用-f開關,該開關通過文件接受sed命令,在這種情況下文件是標準輸入-

如果你正在使用bash,該here-string可以採用:

<<<"some pattern" sed 's|.*|s/&/replacement/g|' | sed -f - -i file.txt 

注: sed分隔符|/不應該是some pattern的一部分,否則正則表達式將無法正確形成。

1

這個工作在Linux(測試):

find . -type f -print0 | xargs -0 sed -i 's/str1/str2/g'