キーワードが表示されるまで文字列を読み取り、別の文字列に置き換えます。

キーワードが表示されるまで文字列を読み取り、別の文字列に置き換えます。

私はUNIXに初めて触れ、シェルスクリプトを練習しています。文字列の検索と置換が必要なアプリケーションがあります。

file1とfile2にはいくつかの行があります。検索キーワードがあります。 File1とFile2の両方にキーワードがある場合は、File2のキーワードの後に​​続く文字列をFile1のキーワードの後に​​続く文字列に置き換える必要があります。

たとえば、

ファイル1:

abc def ghi jklUnix鍵だ

ファイルには3行が含まれています。Unix鍵だ

ファイル2:

例文ですUnix2番目のファイルから

2号線です、Unix2番目のファイルの新しい行

キーワードは「unix」です。ここで、ファイル 1 の unix の後の文字列は "is the key" なので、ファイル 2 の "unix" の後の文字列 (つまり "in the second file") は "is the key" に置き換える必要があります。したがって、文字列を読み取って置き換えた後、ファイルの出力は次のようになります。

ファイル1:

abc def ghi jklUnix鍵だ

ファイルには3行が含まれています。Unix鍵だ

ファイル2:

例文ですUnix鍵だ

2号線です、Unix鍵だ

私はそれぞれ次のコマンドを使用しました

 grep sed awk

しかし、検索と置換を組み合わせる方法はわかりません。誰もが上記の作業を行う方法を教えてもらえますか?どんなアドバイスや助けにも感謝します。

事前にありがとう

答え1

これは提供されたサンプルファイルで機能します。

replacement=$(sed -n 's/^.*unix\(.*$\)/\1/p' file1) sed -i "s/^\(.*unix\).*$/\1$replacement/" file2

最初のファイルのunixキーワードの後に​​は、1行に1回しか現れない文字列値が1つしかないとします。

リクエストに応じてどのように機能するかを簡単に説明してください。

これらの2行はシェルスクリプトに含める必要があります。最初の sed 正規表現は、次の行の一部を抽出します。Unix最初のファイルのキーワード。 代替ネットワーク変数は$()コマンド置換を使用してその部分を取得し、次の行で変数を使用して2番目のファイルのキーワードの後の行部分を置き換えます。

関連情報