grepと置換

grepと置換

キーワードを含むファイルがあります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 }

実際には入力しないでください{そして}; それらは単に境界を定めるためだけに存在します。

関連情報