grepまたはsedを使用して2つのファイルから文字列を取得する

grepまたはsedを使用して2つのファイルから文字列を取得する

2つのテキストファイルがあります。 sedまたはgrepを使用して一致する文字列を検索し、text2.txtで文字列を置き換える方法は?

name=" "」の下にあるすべての項目を検索する必要があります。見つかった場合は、 path="" の下のコンテンツに置き換えます。 output.txt には必須の出力データがあります。

テスト1.txt

domain merge_requests
abc frameworks merge_requests
dvc frame-test merge_requests

test2.txt

<project path="test/domain" name="device/common" />
<project path="test1/frameworks " name="test/frameworks" />
<name="test/frame-test" project path="test3/frame-test" />

出力.txt

test/domain merge_requests
test1/frameworks merge_requests
test/frame-test merge_requests

答え1

あなたの説明はあなたの例とは異なります。例では、常に/最初の引用符付き文字列の後の部分文字列を最初の引用符付き文字列全体に置き換えて、前の単語がある場合は削除しようとしています。

test2.txtしたがって、最初に次のように保持バッファから最初の引用符付き文字列を収集できます。

sed 's/[^"]*"\([^"]*\)".*/\1/;H;$!d;g' test2.txt

次に、このセットを各保持に追加して交換に使用します。

sed '/<.*>/{s/[^"]*"\([^"]*\)".*/\1/;H;d};G;s/[^ ]* *\([^ ]\{1,\}\)\( [^\n]*\)\n.*\n\([a-z0-9]*\/\)\1.*/\3\1\2/;s/\n.*//' test2.txt test1.txt

最後sのコマンドは、一致しない行を処理することです。あなたの場合は、そのようなことが起こらない場合はそのままにしておくことができます。これにより出力が提供されます。

説明した内容に似たものにしたい場合は、調整できます。ただし、namesumの順序の変更に注意してくださいpath

関連情報