ファイルコンテンツの検索と置換

ファイルコンテンツの検索と置換

次のような "include" ステートメントで始まるファイルがあります。

include foo.xyz
include bar.xyz
do c
do d

ファイルfoo.xyzにが含まれてdo aいてファイルにがbar.xyz含まれているとします。各ステートメントをのコンテキストに置き換えるdo bスクリプトをどのように書くことができますか?私は次のような結果を得たいと思います。include file.xyzfile.xyz

do a
do b
do c
do d

頑張った」sedを使用して文字列をファイルの内容に置き換える「しかし、ファイル名はハードコードされています。パラメータに応じてファイル名を動的に生成したいと思いますinclude

ベストアンサー1

これはawkを使った単純な再帰バージョンです。 PATHにスクリプトを生成する必要があります。

#!/bin/bash
awk '
$1=="include" && NF>=2 {
   system("'$0' " $2)
   next
}
{print}' "$@"

ファイル名に特殊文字(スペースを含む)がないとします。 awkは最初の単語が含まれていることを確認し、スクリプトを呼び出して2番目の単語として提供されたファイルを処理します。追加の行を印刷します。参考$0としてここに外部awkの場合は一重引用符、シェルの場合も同じです$0。つまり、スクリプト名です。

おすすめ記事