UNIXの、Cシェルでsedを使った文字列の置換方法について質問です。


「1 2 3」というタブで区切られた文字列を
「sed ’s/1 2 3/a b c/g’ ”hoge” >! hoge1」
というように、「a b c」というタブで区切られた文字列に置換したいのですが、このままではタブをうまく認識してくれません。

メタ文字のエスケープなどが関係するのかな?と素人ながら推測しているのですが、上記のことを実現するのに役立つページを紹介して下さい。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/09/30 20:53:07
  • 終了:--

回答(3件)

id:ootatmt No.1

ootatmt回答回数1307ベストアンサー獲得回数652005/09/30 20:57:57

ポイント40pt

sed ’s/1¥t2¥t3/a¥tb¥tc/g’ ”hoge” >! hoge1


としてみてはどうですか。

id:hashi

なるほど、タブは「t」でいいんですか!

試してみましたがバッチリでした♪

ありがとうございます。

2005/09/30 22:55:28
id:aki73ix No.2

aki73ix回答回数5224ベストアンサー獲得回数272005/09/30 21:29:53

ポイント20pt

タブに置換したい場合は

¥t を使います


#!/usr/local/bin/perl

  print qq(Content-type: text/html¥n¥n);

  $mthd=$ENV{'REQUEST_METHOD'};

  local($qu,@in,$key,$val);

  if($mthd eq 'GET'){

     $qu=$ENV{'QUERY_STRING'};

  }

  elsif($mthd eq 'POST'){

     read(STDIN,$qu,$ENV{'CONTENT_LENGTH'});

  }


  *datas = decode();

  $ax=$datas{'test'};

  open(FILE,">data/hoge");

  print FILE $ax; 

  close(FILE);

  system('sed "s/1 2 3/a¥tb¥tc/g" "data/hoge" ">data/hoge1"');

  open(FILE,">data/hoge1");

  @que = <FILE>;

  for($a=0;$a<$line;$a++){

    print $que[$a]; 

  }

  close(FILE);

  exit;


sub decode

{

  local(@query)=split(/&/,$qu);

  foreach(@query){

    tr/+/ /;

    ($key,$val)=split(/=/);

    $key=~s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c",hex($1))/ge;

    $val=~s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c",hex($1))/ge;

    $val=~s/`/¥[Illegal¥]/g;

    $val=~s/¥|/¥[Illegal¥]/g;

    $val=~s/¥r¥n/¥n/g;

    $vl2{$key}=$val;

  }

  return *vl2;

}


http://www.rfs.jp/sitebuilder/perl/02/02.html#5.エスケープシーケンス:detail]

文字のエスケープについてはこちらに詳細があります

id:hashi

参考になりました!

2005/09/30 22:56:08
id:makeworld No.3

makeworld回答回数75ベストアンサー獲得回数232005/09/30 22:19:18

ポイント20pt

GNU sedでしたら、¥tでタブを表記できます。

sed -e ’s/1¥t2¥t3/a¥tb¥tc/g’


上記が通らない場合は、shell scriptを作成して、ホンモノのタブキャラクタを記述することで置換できると思います。


#!/bin/sh

sed -e ’s/1タブ2タブ3/aタブbタブc/g’ ”$*”

id:hashi

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

2005/09/30 22:57:02

コメントはまだありません

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

トラックバック

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません