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
のコマンドは、一致しない行を処理することです。あなたの場合は、そのようなことが起こらない場合はそのままにしておくことができます。これにより出力が提供されます。
説明した内容に似たものにしたい場合は、調整できます。ただし、name
sumの順序の変更に注意してくださいpath
。