jgawkでスクリプトを組んでいます。

下記の任意の文章に一致するような正規表現をお願いします。

■文頭━━━━(長さ不定)━━■

(任意の文章数行、空白や空行もあり)

○文末━━━━(長さ不定)━━○

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/05/28 17:00:54
  • 終了:--

回答(3件)

id:aki73ix No.1

aki73ix回答回数5224ベストアンサー獲得回数272004/05/28 17:24:42

ポイント20pt

URLはダミーです

Windowsのテキストならば

/■━+■¥r¥n*○━+○/

で、改行コードが違うのなら¥r や¥nに置き換えてくださいなくても( /■━+■*○━+○/

で)動作すると思いますが、無いと

”■━■○━○”でもHITしてしまいます

原理的にはこうなんですが、普通は行単位で正規化して参照しますよね?

文単位で参照ってのは一時代入するか、置換して実行し無いと難しいと思うので、どんなScriptを書かれてるのかがちょっと気になります・・・

id:Feynman

>文単位で参照

したことがなかったので、どうすればいいかも含めて質問してみました。

2004/05/28 17:33:48
id:aki73ix No.2

aki73ix回答回数5224ベストアンサー獲得回数272004/05/28 19:41:46

ポイント20pt

URLはダミーです

>>文単位で参照

>したことがなかったので、どうすればいいかも含めて質問してみました。

やはりそうでしたか

通常AWKはレコードセパレータとフィールドセパレータを指定して、レコード単位で処理します

【標準】

BEGIN{ RS=”¥r” ; FS=””}

ですから

BEGIN{ RS=”¥t” ; FS=””}

等にしてファイルを1つのファイルとして処理します

処理の例です

#レコードセパレータを使っていない適当な文字にする(ここではTAB)

BEGIN{ RS=”¥t” ; FS=””}

{

x=$1;

for(a=b=c=1;a>0&&b>0;)

#レコードに該当文字が無くなるまでループ

{

match(x,”■━+■”);

a=RSTART;

c=RLENGTH;

match(x,”○━+○”);

b=RSTART;

d=substr(x,a+c,b-a-c);

if(b>0&&a>0){

#該当部があるか確認

f=sub(/○━+○/,””,x);

if(b>a){

#該当部があれば処理

printf(”%s”,d);

e=sub(/■━+■/,””,x);

}

}

}

}

id:underway No.3

underway回答回数51ベストアンサー獲得回数12004/05/28 22:38:49

ポイント20pt

http://www.kt.rim.or.jp/~kbk/gawk-30/gawk_6.html#SEC38

The GNU Awk User's Guide - 入力ファイルの読み込み

(URLは後ろのほうの「FS」のところのみ関連します)

スクリプトでマッチングされたあと何らかの置換処理を行うような処理をされていると想定してよいでしょうか。(マッチングさせるだけだと、以下はあまりあてはまらないと思います)

自分はこういう場合、元のファイル以外に処理用のテンポラリファイルを作って内容を書き換えてしまいます。

例えば

1)改行や空白、空行に意味がない場合

 ・1回目の置換で改行や空白をなくしてしまう。

 ・次に、文末の後に改行を入れる。

  そうすると/■━+■*○━+○/

  で処理ができるようになります。

2)改行や空白、空行をなくしたくない場合

 今回の例だと、文頭、文末の区切り記号を変えてしまうことを考えると思います。

 awkはFS変数の値を変えることでフィールド区切り文字を変更することができますので、(たとえば改行以外に)

 ・文頭の区切り文字は削除する

 ・文末の区切り文字を例えば「○」のみなど、任意の文章中に出てこない文字に変換する。

 ・FS変数を上で設定した「○」にしてから処理を行う。

ことで、改行は残したままマッチング処理をすることができます。

正規表現でマッチングしたあと何をされるかをお知らせいただくと、もう少し的確な回答もできるかもしれません。

id:Feynman

aki73ixさん、underwayさん

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

なんとか処理できそうです。

2004/05/29 09:07:53

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

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

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

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

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