プロが教えるわが家の防犯対策術!

1つ目テキストファイルと2つ目のテキストファイルの間に改行文字を入れながら2つのファイルを連結し、1つ目のファイルに上書き保存する方法をお教え下さい。
以下のスクリプトを考えましたが、これでは改行文字が削除されてしまいます。

(f1.txtの内容)
ab

(f2.txtの内容)
xy

(スクリプト)
#!/bin/bash
echo -e "\n" >> f1.txt
echo -e `cat f1.txt f2.txt` > f1.txt

(できあがったf1.txtの内容)
ab xy

2018年1月21日

A 回答 (2件)

Windows のメモ帳などで開くなら、改行コードは CR LF です。



\r = CR
\n = LF

#!/bin/bash
echo -e "\r\n" >> f1.txt
cat f2.txt >> f1.txt
    • good
    • 1
この回答へのお礼

bx2様、ありがとうございます。
なぜか、"cat f2.txt >> f1.txt"に思い至らず、
"cat f1.txt f2.txt > f1.txt" というものに取りつかれていました。
2018年1月21日

お礼日時:2018/01/21 20:27

` (バッククオート) の動作を誤解しています。



` は、それで囲まれた文字列を「コマンド」と見做して実行し、その結果'(標準出力) を文字列にする機能があります。

https://linuxjm.osdn.jp/html/GNU_bash/man1/bash. …
> コマンド置換
> 末尾の改行文字は削除されます。
> 文字列の途中にある改行文字は削除されませんが、 単語分割の際に削除されることがあります。

シェルスクリプトでは、 置換を行なった最終的な状態でコマンドを実行します。
echo -e `cat f1.txt f2.txt`

echo -e ab\
xy
という状態に置換されて実行されます。
(継続行なので、末尾に\を付けました)
このとき、改行はただの区切り文字扱いなるので
echo -e ab xy
と同じことになります。


コマンド置換を使っているのは、何か意図があるのでしょうか?

echo -e "\n" >> f1.txt
は「 echo -e "\n" を実行し、その出力を f1.txt に追加する 」の意味です。
だとすれば
「ファイルf2.txt の内容を出力する」コマンドの出力を f1.txt に追加するようにすればいいだけでは?


cat f1.txt f2.txt
を使うのなら、一旦別ファイルに保存して、それをf1.txtにコピーするという方法もあります。
    • good
    • 0
この回答へのお礼

kmee様、ありがとうございます。
別ファイルへの保存を避けることを考えていましたが、bx2様へのお礼に書きましたとおり、誤ったことを考えていました。
2018年1月21日

お礼日時:2018/01/21 20:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!