2017-03-01 7 views
0

現在、私は見つけると、以下のものを使用して置き換えます。sedにパイプされたファイル名のリストを使って変数を見つけて置き換えることはできますか?

ack -l oldstring | xargs sed -i '' -e s/oldstring/newstring/g 

oldstring詳細を入力することなくこれを行う方法はありますか?これは私がそれが動作しませんしようとしているものです:

ack -l oldstring | xargs sed -i '' -e s/{}/newstring/g 
+0

は、このヘルプをしていますか? http://stackoverflow.com/questions/14402949/how-to-use-xargs-with-sed-in-search-patternまたはcatch-22にいますか? – stevesliva

+0

@steveslivaこれらの例では、一度に1つのファイル(file.txt)のための問題です。私のケースでは、ack -lは全てがoldstringを含んでいるファイル名のリストを返します。これらのすべては、findコマンドとreplaceコマンドを適用したいものです。 – YPCrumble

答えて

0

私は最終的に入力して保存するために、2つのbashの関数を作成することにしました:

# Function to find and replace. 
function ags { 
    #!/bin/bash 
    ag -l "$1" | xargs sed -i '' -e "s/$1/$2/g"; 
} 
# Function to delete any lines that contain a string. 
function agd { 
    #!/bin/bash 
    ag -l "$1" | xargs sed -i '' -e "/$1/d"; 
} 
関連する問題