0

次のことを行うbashスクリプトを作成しようとしています:

1) 1 つのファイル (f1.txt) の内容を読み取る

2) 「<」で始まり、「start」または「item」を含まない各行について、2 番目のファイル (f2.txt) の内容全体を次の行に挿入します。この変更は、元のファイル f1.txt で行う必要があります。

例えば:

f1.txt:

<start>
  <name1>
    <item>
      stuff
    </item>
  </name1>
  <susan>
    <item>
      stuff
    </item>
  </susan>
</start>

f2.txt:

HELLO
WORLD

結果、f1.txt:

<start>
  <name1>
    HELLO
    WORLD
    <item>
      stuff
    </item>
  </name1>
  <susan>
    HELLO
    WORLD
    <item>
      stuff
    </item>
  </susan>
</start>  

これを解決するにはどうすればよいですか?行ごとに読むべきですか、それとも文字ごとに読むべきですか?

4

3 に答える 3

3

次の awk コマンドを使用できます。

awk 'NR==FNR {if (a) a=a ORS $0; else a=$0; next}
     /^ *<[^\/]/ && !/<(start|item)>/ {$0=$0 ORS a}1' f2.txt f1.txt
<start>
  <name1>
HELLO
WORLD
    <item>
      stuff
    </item>
  </name1>
  <susan>
HELLO
WORLD
    <item>
      stuff
    </item>
  </susan>
</start>
于 2013-09-11T18:20:15.047 に答える
1

を使用してはならないという理由だけで、 を使用sedしてそれを行う方法を次に示しますsed

sed -e '/ *<[^/]/{/\(start\|item\)/!{r f2.txt'$'\n''}}' f1.txt

ごめんなさい。どういたしまして。

于 2013-09-11T18:55:40.710 に答える