2つのファイルがあり、1つはパターンのリストを保持し、もう1つはこれらのパターンに基づいて変更する必要があります。これまで私は実験してきました
cat patterns.txt| xargs -n1| sed 's/patternfromfile/subtitution/'
しかし、xargsを「s/here //」に入力する方法がわかりません
ありがとうございました
Xargsに-iオプションが必要な場合があります(詳細については、manページを確認してください)。これは基本的に{}
をパターンに置き換え、パターンごとに1回コマンドを実行します。したがって、パターンごとに1回ファイルに対してsedが実行されます。パターンを作成するときは、このことを覚えておく必要があります。
user@Host [/tmp]$ cat patterns
a
[pd]ie
user@Host [/tmp]$ cat file
hat
cherry pie
die alone
eat cake
user@Host [/tmp]$ cat patterns | xargs -i sed 's/{}/moo/' file
hmoot
cherry pie
die moolone
emoot cake
hat
cherry moo
moo alone
eat cake
または、他の方法を使用して、パターンファイルからsedスクリプトを動的に作成することもできます。たとえば、パターンファイルでsedを使用して、ファイル全体に1回のパスでそれらをすべて適用できます。 :)
user@Host [/tmp]$ sed 's|^|s/|;s|$|/moo/;|' patterns | tee patterns.sed
s/a/moo/;
s/[pd]ie/moo/;
user@Host [/tmp]$ sed -f patterns.sed file
hmoot
cherry moo
moo moolone
emoot cake
次のような正規表現を作成できます。
regex=$(tr '\n' '|' < patterns.txt)
sed -ri "s/$regex/replacement/" filename
S ///コマンドに「g」フラグを追加することを選択できます。
あなたが持っているパターンを知らなくても:
ファイルを直接編集する場合は、-iオプションを使用します。
while read pattern
do
sed -i 's/"${pattern}"/substitution/' yourfile
done < patterns.txt
または、出力を新しいファイルにリダイレクトします。
while read pattern
do
sed 's/"${pattern}"/substitution/' yourfile >> outfile
done < patterns.txt