我需要在sed中使用命令的輸出作爲搜索模式。我將使用回聲做出了榜樣,但認爲可能是一個更復雜的命令:如何在搜索模式中使用xargs和sed
echo "some pattern" | xargs sed -i 's/{}/replacement/g' file.txt
該命令不起作用,因爲「某種模式」有一個空白,但我認爲這清楚地說明我的問題。
我該如何使命令起作用?
由於提前,
我需要在sed中使用命令的輸出作爲搜索模式。我將使用回聲做出了榜樣,但認爲可能是一個更復雜的命令:如何在搜索模式中使用xargs和sed
echo "some pattern" | xargs sed -i 's/{}/replacement/g' file.txt
該命令不起作用,因爲「某種模式」有一個空白,但我認爲這清楚地說明我的問題。
我該如何使命令起作用?
由於提前,
使用命令替換而不是,所以你的例子看起來像:
sed -i "s/$(echo "some pattern")/replacement/g" file.txt
雙引號允許命令替換,同時防止空間被拆分工作。
您需要告訴xargs要用-I開關替換什麼 - 至少在某些版本中,它似乎不會自動了解{}。
echo "pattern" | xargs -I '{}' sed -i 's/{}/replacement/g' file.txt
這可能爲你工作(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
的一部分,否則正則表達式將無法正確形成。
這個工作在Linux(測試):
find . -type f -print0 | xargs -0 sed -i 's/str1/str2/g'
謝謝!你讓我今天一整天都感覺很好! :) – harrison4