Bashで複数のテキストファイルの先頭と末尾にテキストを追加するには?

Bashで複数のテキストファイルの先頭と末尾にテキストを追加するには?

テキストファイルでいっぱいのディレクトリがあります。私の目標は、すべてのものの始めと終わりにテキストを追加することです。各ファイルの先頭と末尾のテキストは同じです。

Webから取得したコードによると、以下はファイルの先頭に追加されたコードです。

echo -e 'var language = {\n$(cat $BASEDIR/Translations/Javascript/*.txt)' > $BASEDIR/Translations/Javascript/*.txt

ファイルの末尾に追加されるコードです。目標は、};各ファイルの末尾にテキストを追加することです。

echo "};" >> $BASEDIR/Translations/Javascript/*.txt

私が引用した例は単一のファイルで動作します。私の考えでは、ワイルドカードを使ってみるべきだと思います*.txt

他の間違いを犯した可能性もあります。とにかく、複数のファイルの先頭と末尾にテキストを追加するにはどうすればよいですか?

答え1

ファイルにテキストを追加するには、次のものを使用できます(GNUを介して実装されていますsed)。

sed -i '1i some string' file

テキストの添付はこんなに簡単です

echo 'Some other string' >> file

最後にやるべきことは、編集したいすべてのファイルを繰り返すループにこれを置くことです。

for file in *.txt; do
  sed -i '1i Some string' "$file" &&
  echo 'Some other string' >> "$file"
done

答え2

GNU sedを使用できます

sed前述のように、iコマンドを使用して、それぞれのファイル内の一致する行の前後にテキスト行を挿入できますa。表示されていないのは、1行のコードでこれを実行できることです。複数のファイルすぐに。

1i以下は、最初の行の前と最後の行の後に行を挿入します$a。 globに一致するすべてのファイルに対して挿入が行われます*.txt

sed -i -e '1ivar language = {' -e '$a};' -- *.txt

i行番号だけでなく、a与えられたパターンに一致するすべての行に適用されます。行に以下が含まれるたびにコメントが挿入されますvar y = 2;

sed -i -- '/var y = 2;/i//initialize variable y' *.js

答え3

完全なPOSIX互換コマンド、使用ex:

for f in *.txt; do printf '%s\n' 0a 'var language = {' . '$a' '};' . x | ex "$f"; done

printfコマンドの対応する部分を別々に実行すると、そのコマンドが渡された正確な編集コマンドを表示できますex

0a
var language = {
.
$a
};
.
x

0a「0行の後にテキストを追加する」(つまり、1行の前に)を意味します。次の行は、0行目の後に「追加」されるリテラルテキストです。.行自体のピリオド()は、追加するテキストを終了します。

$aファイルの最後の行の後にテキストを追加することを示します。

x変更を保存して終了することを示します。

答え4

さらに、次の権利があります(結果は.outファイルにあります)。

find . -name '*.txt' -exec sh -c '(echo HEAD;cat {};echo FOOT) > {}.out' \;

別のより詳細なバリエーション - ソースファイルが結果に置き換えられました。

find . -name '*.txt' -exec sh -c '(echo HEAD;cat {};echo FOOT) > {}.tmp && mv {}.tmp {}' \; -print

関連情報