私は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番目のファイルのキーワードの後の行部分を置き換えます。