人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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


●質問者: spin6536
●カテゴリ:コンピュータ 学習・教育
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● a-kuma3
●40ポイント

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

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

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

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

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


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

 sed -e "..." file > tmp
 cp tmp file
 rm tmp
◎質問者からの返答

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


2 ● JULY
●60ポイント ベストアンサー

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


拡張ファイル属性 - Wikipedia


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


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


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


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


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

◎質問者からの返答

Mac OS Xです。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ