• 締切済み

ファイル内の改行を削除し1行にするシェル

お世話になっております。 ファイル(テキスト)内には、改行を含んだ複数の行が記述されています。 これを1行にして上書き保存するシェルを実行をするための シェルを作成したいと思っています。 ファイル内には以下のような値が改行を含んで入っています。 123 456 789 →これを、「123456789」と改行を取り除き、既存のファイルの上書き保存をしたい なお、改行を含んだ対象のファイルは、ファイル名にある文字を含む ファイルのみに対して行いたいのですが。 例:ファイル名に、「*abc*」、「*def*」、「*xyz*」を含むファイルが対象 改行を取り除くコマンドはわかるのですが、シェルにするプロセスがわかりません。 cat 入力ファイル名 | tr -d '\n' > 変換後の出力ファイル名 ご教授いただきたく、よろしくお願いします。

みんなの回答

  • entree
  • ベストアンサー率55% (405/735)
回答No.3

こんな感じでしょうか。 find -name \*abc\* -o -name \*def\* -o -name \*xyz\* | xargs perl -pi -e 's/\n//g' 元ファイルを.bakとして残しておきたいのであれば find -name \*abc\* -o -name \*def\* -o -name \*xyz\* xargs perl -pi.bak -e 's/\n//g'

jumpy_y
質問者

お礼

entree様 ありがとうございます うまくできました 助かりました

すると、全ての回答が全文表示されます。
  • gfe01045
  • ベストアンサー率61% (19/31)
回答No.2

同じようなものですが、私なら・・・ カレントディレクトリ下にあるファイルが対象。(再帰検索あり) #!/bin/sh pwd=`pwd` for f in `find $pwd -name "*abc*" -o -name "*def*" -o -name "*xyz*"` do tmpfile=/tmp/$$.`basename $f` cat $f | tr -d '\n' > $tmpfile mv $tmpfile $f done 必ず実行権限をつけてください。

jumpy_y
質問者

お礼

gfe様 ありがとうございます うまく動きました 助かりました

すると、全ての回答が全文表示されます。
  • helonpa
  • ベストアンサー率38% (108/278)
回答No.1

> 改行を取り除くコマンドはわかるのですが、シェルにするプロセスがわかりません。 実行可能なファイルにするということでしょうか。 であれば、以下のようなファイルを作って実行権限を付与すれば良いです。 ---------------------------------------- #!/bin/bash for file_path in ./*abc* ./*def* ./*xyz* do mv $file_path ${file_path}.tmp cat ${file_path}.tmp | tr -d '\n' > ${file_path} done ---------------------------------------- ※注意事項 カレントディレクトリにあるファイルが対象です。 対象ファイル数が異常に多いとエラーになります。 実行完了後、問題なさそうであれば ./*.tmp で元ファイルを消す必要があります。

jumpy_y
質問者

お礼

helonpa 様 うまくできました。ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A