sedを用いた処理で質問があります。
出力結果の改行を置換して一列として表示しようとしているのですが、どうもうまくいきません。
(perlは敢えて使いません)

例えば、以下のようなファイルがあるとして、

$ cat hoge.txt
hoge
boo
bar

この出力結果を加工して、「hoge boo bar」のように、
改行をスペースに置換して一行として表示したい場合は、どのようにすれば良いでしょうか?

ちなみに、以下のような使い方だと、うまくいきませんでした。

$ cat hoge.txt | sed 's/\
> / /g'

$ cat hoge.txt | sed 's/\n/ /'


■実行環境

OS : RedHat EL 1
sedのバージョン : sed-4.0.7-3

宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

redhatだったら、sedのオンラインマニュアルがあるはずですから熟読してください。


たとえば、Nコマンド(append the next line of input into the pattern space.)を使えばできます。

しかし、改行を削るだけだったらsedを使うまでもなく
cat hoge.txt |tr -d '\012'
改行文字を空白に変えるのなら
cat hoge.txt |tr '\012' ' '
で済みますが。
ファイルが小さければ、 echo `cat hoge.tst`
というのも。
    • good
    • 0
この回答へのお礼

perlは入っていない処理系があるのでsedで・・・・・・
と思ったのですが、trでこのように出来るとは。
trでいこうと思います。

私の勉強不足でした。

ありがとうございました。

お礼日時:2006/07/11 11:16

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qdir /A /B /S *.txtをLinuxで

Windowsで

C:>dir /A /B /S *.txt

を実行すると、そのディレクトリ以下の*.txtファイルが
C:\abc\def\hij.txt
C:\abc\def\klm.txt
...
と出力されます。

これをLinux上で出来ないでしょうか。
ネット上で調べたのですが、私の実力では"/S"と同じことがLinuxでは出来ないようです。

Aベストアンサー

質問内容を正しく解釈しているかわかりませんので間違っていたらごめんなさいです。

例えば、/home以下の*.txtを出力するのならこんな感じでしょうか。

find /home -type f -name "*.txt"

おそらくlsコマンドではうまくいかないと思いますので。

Qファイル/bin/catへのアクセス

オペレーティングシステムに関する話です。

UNIXの木構造のファイルシステムにおいて、
ファイル/bin/catのデータブロックへのアクセスはファイルシステムの内部では具体的にどの様に行われるか、分かる方教えて頂けませんか?

Aベストアンサー

それじゃあ伝統的な UFS のイメージで説明します。

ファイルのモード、オーナー、サイズ、リンクカウント、各種時刻などの属性情報は i-node で管理されてます。 これは一つのファイルシステム上では一意な ID になってます。ls -i や find の -inum で指定できる番号です。

ディレクトリも一種のファイルで、/bin のディレクトリエントリに、cat の実体への i-node が格納されてます。ファイル名が格納されてるのはディレクトリエントリの方で、i-node にはファイル名は入ってません。その代りリンクカウントを +1 します。これは ln のハードリンクに相当します。ディレクトリ自身の . とその親 .. もこの機能を使ってます。パスを / からフルパスで辿るようなことも、このリンクを順にサーチすることで、最終的に目的のファイルへの i-node に辿り着きます。もちろん途中でパーミッションのチェックも行なわれます。

ちなみに rm は実際はファイルを消すのではなくて、i-node 中のリンクカウントを -1 してるだけで、このカウントがゼロになると、i-node も消されてファイルの実体もフリーされます。

一方データブロックも番号で管理されていて、i-node には複数のブロック番号を格納できます。初めのうちは直接ブロック番号を追加していきますが、ある程度からは間接参照して格納可能なサイズを伸ばすようにします。すなわち参照先のブロックに、さらにその先へのデータブロック番号が格納されるようになります。ファイルサイズが大きくなると、これが 1段、2段、3段と続きます。このブロックと i-node の関係は newfs のオプションで調整できます。

あと、これは通常ファイルの事です。デバイスファイルとかはまた別。
ファイルは穴開きもあり得る
実際はいろんな拡張がされてる。journal, logging, softupdate, mksnap, etc
こんなものか。もっと詳細が知りたければ、wikipedia あたりから調べるか、書籍を漁るかしてくれ。

それじゃあ伝統的な UFS のイメージで説明します。

ファイルのモード、オーナー、サイズ、リンクカウント、各種時刻などの属性情報は i-node で管理されてます。 これは一つのファイルシステム上では一意な ID になってます。ls -i や find の -inum で指定できる番号です。

ディレクトリも一種のファイルで、/bin のディレクトリエントリに、cat の実体への i-node が格納されてます。ファイル名が格納されてるのはディレクトリエントリの方で、i-node にはファイル名は入ってません。その代りリンクカウント...続きを読む

Q$ sudo vi /etc/hosts で大苦戦。

rootでchmodコマンドを実行しましたが、

iキーやinsertキーを押しても何の反応もなく

割り込みしかできません。

コレをやる前に「やれるものなら続けてみろ。」

赤字の英語で注意があります。

どなたかいいアイディアはないでしょうか?

該当URLは http://d.hatena.ne.jp/bicycle1885/20110508/1304871358

です。

チョット試してみてください。

どうぞ宜しくお願い申し上げます。

Aベストアンサー

いや、ちゃんとそのままコマンド貼り付けてください。
できますから。

chmodは権限変更で、755は所有者以外にも権限を持たせる番号で、後ろに対象ファイルのパスを書きます。
対象のパスにファイルがないとは思えないので正確に書いてないだけかと思います。

ちなみにsuduは権限を持たないユーザに操作させるときに使いますが設定が必要ですし、rootには不要です。スーパーユーザなので。

QシェルスクリプトのBシェル(Bourne)に出てくる、$0,$1,$2

シェルスクリプトのBシェル(Bourne)に出てくる、$0,$1,$2...のような位置パラメタや、$?,$$,$!,$-のような特殊変数がありますが、これはPerlやRubyもあるようですが、意味や効果、やり方等は同じでしょうか。

当方はPHP,JavaScriptしか触れていませんし、PHPやJavaScriptは、そのような位置パラメタや特殊変数は見当たりませんでした…。

つまり、PerlやRubyはUNIXのコマンドから誕生したスクリプト言語ということでしょうか。

こういった位置パラメタや特殊変数はPerlやRuby以外に他の言語にもありますでしょうか。PythonとかCとかJavaとか…。

また、Bシェルを学んでいる途中ですが、シェルスクリプトの中にはbourne以外にもbashやC Shell,zsh,Perlがありますが、何故Perlが入っているのでしょうか。
Perlをやっている方は別途シェルスクリプトをやる必要はないということでしょうか。

Aベストアンサー

>意味や効果、やり方等は同じでしょうか

意味は、それぞれの言語やスクリプトで違います。

>PHPやJavaScriptは、そのような位置パラメタ


だとしたら、まだ初心者でしょう。存在します。

>PerlやRubyはUNIXのコマンドから誕生したスクリプト言語ということでしょうか

違います。UNIX OSが歴史が深いし、どちらかと言うとコマンドで実行形式が普通だったから普及し、受け入れられる柔軟性が(使っている側とOS側も)あったため、使用する人が増えただけです。

>こういった位置パラメタや特殊変数はPerlやRuby以

あたりまえです。存在します。今はオブジェクト指向が当たり前の世界なので、フレームワークとか外部の物を取り入れたりすると必ず必要になりまよね。

>bourne以外にもbashやC Shell,zsh,Perlがありますが、何故Perlが入っているのでしょうか。

”入っている” と言う意味がよく分かりませんが、たぶんOSに梱包されていて設置すると使えると言う意味でしょう。

まず”シェルスクリプト”のシェルの意味を正しく理解しましょう。下記のURLに妥当な説明があります。その説明を理解しましょう。

http://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%A7%E3%83%AB

ここの引用で
----------------
「コマンドインタプリタ」の名称で呼ばれる場合は単に「コマンドを解釈する者」の意であり、OSのユーザインタフェースとしての意味合いは失われていることが多い。
----------------

となっているとおり、シェルがたくさんあるのはUNIX系OSの歴史でもあります。つまり互換性ですね。バージョンが上がったり、派生型のOSだと、過去の資産を使えない事がかなり痛手です。それで、バージョンを重ねるたびに、そのまま過去のシェルも残り、UNIX(Linuxも含む)の歴史を追従して、オープン化や共有化されています。

それぞれのシェルの中で当然、コマンドが使用できます。その中にPerlも在るだけです。シェルは、コマンドインプリンタとしての役目を果たしているだけです。内部コマンドと、外部コマンドがあるので、外部コマンドの一つがPerlと言うだけです。他のコマンドも同じです。

と言うことで、

>Perlをやっている方は別途シェルスクリプトをやる必要はないということでしょうか。

は、間違いである事が分かりますね。

No1の方もいっていますが、上記の理由でPerlはシェルではありませんね。だからShell Scriptとはならないわけです。単なる「コマンドインタプリタ」であって、OSのユーザーインターフェースではありませんね(シェルではない)。

>意味や効果、やり方等は同じでしょうか

意味は、それぞれの言語やスクリプトで違います。

>PHPやJavaScriptは、そのような位置パラメタ


だとしたら、まだ初心者でしょう。存在します。

>PerlやRubyはUNIXのコマンドから誕生したスクリプト言語ということでしょうか

違います。UNIX OSが歴史が深いし、どちらかと言うとコマンドで実行形式が普通だったから普及し、受け入れられる柔軟性が(使っている側とOS側も)あったため、使用する人が増えただけです。

>こういった位置パラメタや特殊変数はPerl...続きを読む

Q\\コンピュータ名\IPC$ パスワードが分かりません。

\\コンピュータ名\IPC$ パスワードが分かりません。

Server Debian Linux Lenny , Client Windows98 です。

Windows上から、マシン名は見えるのですが、ダブルクリックすると、パスワード認証されるのですが、実際、何のパスワードを入力してよいのやら、分かりません。

宜しくお願いします。

Aベストアンサー

通常は、クライアント側(Windows側)に最初にログインしたときのパスワードだと思いますが…。


人気Q&Aランキング

おすすめ情報