
キーワードを含むファイルがありますRESOURCE
。それはファイル内のどこにでも出現する可能性があります。
[email protected]
[email protected]
ここで、を に置き換えたいのですが[email protected]
、キーワードが見つかる行を検索しRESOURCE
、等号の後の単語を置き換える必要があります。RESOURCE
キーワードは変更しないでください。
誰かこの件について助けてくれませんか?
入力:
[email protected]
出力:
[email protected]
答え1
grep
この場合、ファイルの内容を変更できないため、役に立ちません。
代わりに、sed
次のように使用できます。
fromaddr='[email protected]'
toaddr='[email protected]'
sed '/^RESOURCE=/s/='"$fromaddr"'$/='"$toaddr"'/' file >newfile
与えられfile
た
some data
[email protected]
[email protected]
[email protected]
[email protected]
more data
これnewfile
により、
some data
[email protected]
[email protected]
[email protected]
[email protected]
more data
このsed
式は、文字列 で始まる行を選択しますRESOURCE
。各行で、行に電子メール アドレスが存在する場合は、それを置き換えます。置換に使用されるパターンは、 と一致し、=
アドレスが行末で終了することを確認します。
答え2
コマンドsed
の方が優れています。
sed -i 's/[email protected]/[email protected]/' yourfile
上記は私のテストでは機能しますが、自分でテストしたい場合は、まずこれを試すことができます:
sed 's/[email protected]/[email protected]/' yourfile
これにより、ファイルに影響を与えずに変更が標準出力に書き込まれます。
どちらの方法でも、次のような希望の変更が行われます。
[email protected]
RESOURCE
ファイル内の値が異なり、それを別の値に変更したい場合は、次のようにします。
grep RESOURCE= yourfile
すると、その行が返され、値が表示されます。
その後、
sed 's/[email protected]/[email protected]/' yourfile
今後の参考のために、面倒な手続きを踏まずに必要なサポートを受けられるように、元の質問でこれらすべてを明確にすることが重要です。
答え3
の後に現れる文字列を置き換えたいと言っているようですが=
、
それが何であろうと—
例えば、サンプル データでは、 を置き換えたいとします[email protected]
。しかし、 の後の文字列が何であっても=
、 を に置き換えたいということですね[email protected]
。どうやら、それをハードコードしたいようですね。
これを行うにはいくつかのバリエーションがあります。最も簡単なのは
sed 's/RESOURCE=.*/[email protected]/'
これは(以下のすべてのコマンドと同様に).*
「そこにあるものにマッチする」という意味で使われています。2回入力したくない場合はRESOURCE=
、上記を次のように短縮できます。
sed 's/\(RESOURCE=\).*/\[email protected]/'
ここで、\(
… は\)
検索文字列の一部をグループとしてマークし (最大 9 つのグループを持つことができます)、\1
最初のグループと置き換えることを意味します。
上記のコマンドは、RESOURCE=
行のどこに現れても検索して置換します。たとえば、入力
# Lakshminarayana wants to change all occurrences of "RESOURCE=".
[email protected]
[email protected]
[email protected]
FOX RESOURCE=The quick brown fox
# Comment: Originally line 2 said [email protected]
に変更されます
# Lakshminarayana wants to change all occurrences of "[email protected]
[email protected]
[email protected]
[email protected]
FOX [email protected]
# Comment: Originally line 2 said [email protected]
RESOURCE=
が行頭に現れる場合にのみ一致させたい場合には、^
:
sed 's/^RESOURCE=.*/[email protected]/'
または
sed 's/^\(RESOURCE=\).*/\[email protected]/'
リソース値のみを置き換えたい場合、行の残り全体は置き換えたくない場合(例:
[email protected] [email protected]
に
[email protected] [email protected]
それもできます。質問を編集して、あなたが望むことを正確に述べ、完全で明確な説明を添えてください。そして例。
はい、上記のいずれかを選択してくださいs
コマンド。さて、ファイルをその場で編集したい場合(あなたが指示したように)、
sed -i { s command } { yourfile }
新しいファイルを作成したい場合は、
sed { s command } { oldfile } > { newfile }
実際には入力しないでください{
そして}
; それらは単に境界を定めるためだけに存在します。