ファイルの特定の内容を別のファイルの最初の行に置き換えるにはどうすればよいでしょうか?

ファイルの特定の内容を別のファイルの最初の行に置き換えるにはどうすればよいでしょうか?

2つのファイルがありますone.txt:sample.txt

one.txt以下の内容が含まれます。

AAAA
BBBB
CCCC
DDDD

sample.txt次のような具体的な内容があります。

>>XXXXXXX<<

どうやって:

  1. 「XXXXXXX」をone.txt?の最初の行の内容に置き換えます。
  2. one.txt?の最初の行を削除します。
  3. one.txtを に名前変更しますAAAA.txtか?

Linux のコマンドラインで?

ここに画像の説明を入力してください

答え1

一つの方法は次のとおりです:

## save the first line of one.txt in the variable $string
string=$(head -n1 one.txt)
## delete the first line of one.txt
sed -i '1d' one.txt
## replace the Xs in `>>XXXXX<<` with the contents of `$string` 
## and save as the new file "$string.txt" (AAAA.txt)
sed "s/>>XXXXXXX<</>>$string<</" sample.txt > $string.txt

>>XXXXXX<<これは、 のどの行にもが 1 つだけ出現することを前提としていることに注意してくださいsample.txt。 が 1 行に複数出現する場合、上記のコマンドは各行の最初の 1 つだけを置き換えます。 すべてを置き換えるには、代わりに以下を使用します。

sed "s/>>XXXXXXX<</>>$string<</g" sample.txt > $string.txt

元の質問では、 の各行の末尾にスペースがありましたone.txt。実際のファイルでもこの​​ようになっており、 に追加する前にスペースを削除する必要がある場合は、sample.txt次を使用します。

string=$(head -n1 one.txt | sed 's/ *$//')

その後は上記と同じコマンドを実行します。

関連情報