Unixで、ファイル内の文字列を" sed 's/.../.../g' file "の形で置き換えようとしています。ターミナル上では書き換えられていても、実ファイルに反映されないファイルがあります。


ls -l でファイルの情報を見てみると、書き換えが反映されないファイルは、モードの表示の後に@がついています。

どのようにしたら、そのようなファイル内の文字列も置き換えて保存することができるでしょうか。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2011/09/14 17:06:01
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:JULY No.2

回答回数966ベストアンサー獲得回数247

ポイント60pt

おそらく、拡張ファイル属性だと思います。


拡張ファイル属性 - Wikipedia


...なんですが、調べると MacOS X の話ばかりです。


パーミッションの横に着く@の意味 - a geek born in Tomakomai


MacOS X ということなので、FreeBSD 由来だと思いますが、「UNIX 全般」で通用する手順が、どうも無さそうに思われます。上記ページで紹介されている xattr コマンドは Solaris には無いみたいで、runat コマンドを使うみたい。


Solaris 9 リリースの新しいファイルシステム機能 (Solaris のシステム管理 (基本編))


なので、具体的な OS 名を挙げた方が、的確な回答が得られるかもしれません。

id:spin6536

Mac OS Xです。

2011/09/14 16:10:30

その他の回答1件)

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154

ポイント40pt

ls の -F で、@ がついてるのは、シンボリックリンクです。

sed による置きかえって、もしかしたら、こういうふうに書いてません?

    sed -e "..." file > tmp
    mv tmp file

mv だと、シンボリックリンク自体を、実ファイルで置き換えてしまいます。

なので、シンボリックリンクが示している実体の方は変わっていません。


以下のようにすれば、リンク先のファイルの内容が書き変わると思います。

    sed -e "..." file > tmp
    cp tmp file
    rm tmp
id:spin6536

回答ありがとうございます。@がついているのはls -l で出てくる、権限表示の後ろです。以下のような感じです。

  • rw-r--r--@ 1 spin6536 staff 706 Sep 14 01:28 file
2011/09/14 15:24:31
id:JULY No.2

回答回数966ベストアンサー獲得回数247ここでベストアンサー

ポイント60pt

おそらく、拡張ファイル属性だと思います。


拡張ファイル属性 - Wikipedia


...なんですが、調べると MacOS X の話ばかりです。


パーミッションの横に着く@の意味 - a geek born in Tomakomai


MacOS X ということなので、FreeBSD 由来だと思いますが、「UNIX 全般」で通用する手順が、どうも無さそうに思われます。上記ページで紹介されている xattr コマンドは Solaris には無いみたいで、runat コマンドを使うみたい。


Solaris 9 リリースの新しいファイルシステム機能 (Solaris のシステム管理 (基本編))


なので、具体的な OS 名を挙げた方が、的確な回答が得られるかもしれません。

id:spin6536

Mac OS Xです。

2011/09/14 16:10:30
  • id:a-kuma3
    お、シンボリックリンクじゃない。
    因みに、Unix というのは、何でしょうか?
  • id:spin6536
    なんとができました。sedで置き換えをしてでてくる標準出力を別の名前で保存して、それを元の名前に変える、という方法でなんとか。

    > 因みに、Unix というのは、何でしょうか?

    あれ?わたしなにか恥ずかしい勘違いしています?普段はCUIシェルで作業をしないので、わからないことだらけでして。UNIXのコマンドを使っているので「UNIXで」と書いたのですが、別のことを書かないといけなかったでしょうか。
  • id:JULY
    「UNIX で」と書くと、「UNIX に分類される OS 上で」と読めます。spin6536 さんが「UNIX で」と書かれていたのは、Mac OS X の CUI シェルで UNIX 系 OS のコマンドを使って、という意味だったんですね。

    一応、Mac OS X も、FreeBSD という UNIX に分類される OS をベースとし開発されたので、他の UNIX 系 OS との共通点は非常に多いです。

    ただ、UNIX と一言で言っても、UNIX に分類される具体的な OS によっては、「このコマンドはこっちにあるけど、あっちには無い」とか、コマンドラインのオプションが微妙に違ったり、といった事があります。

    一応、「この辺が揃っているのが標準」という規格はあるのですが、今回の拡張ファイル属性に関しては、その標準の範疇に入っていないようです。
  • id:spin6536
    JULY さん くわしい説明ありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません