次のような "include" ステートメントで始まるファイルがあります。
include foo.xyz
include bar.xyz
do c
do d
ファイルfoo.xyz
にが含まれてdo a
いてファイルにがbar.xyz
含まれているとします。各ステートメントをのコンテキストに置き換えるdo b
スクリプトをどのように書くことができますか?私は次のような結果を得たいと思います。include file.xyz
file.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
。つまり、スクリプト名です。