そうだ! ssedには、Perl-like な「最短文字列」しか食べない 「*?」というnon-greedyな演算子があるじゃないか、と思い出してしまい……。 (onigsed については、調べません) 以下のような悲惨なことになりました。 正規表現のメタ文字をエスケープするの、嫌いです。好きな人はまず いないと思うけど。だから、置換に失敗したくない! sedに数を数えさせるのは、えーと、ふつう、ムリです。下のように なります。そのうち数を数えはじめそうで、自分が怖いです。 ホールドスペースに最初、"0123456789"(文字列!)を入れておくなど、 やり方がないわけじゃありません。 ま、バカです。 Perl-like regex がある awk。聞いたことがありません。\(...\)を 1個1個分解して、配列に入れるのでしょうか。 「素直にPerlでやれよ!」。Perl regexが使えるPerlを所有しておりません。 厚い厚い日本語の壁があるのです。 Vzマクロはとてつもなく偉い、という結論です。 --- input.txt \x ^aaa\([0-9]\)\([0-9]\)\([0-9]\)\([0-9]\)\zzz$ ------------- --- output.txt aaa\1\2\3\4\zzz ------------- --- detag.sed --- #ssed -R (Perl-mode) -f detag.sed s/^\\x \^// s/^\\x // s/\$$// s/\\(.*?\\)/\\1/ s/\\1\)/\\1/ #泥縄です。訳が分かりません。 s/\\([^1]*?\\)/\\2/ #悲しくなる s/\\2\)/\\2/ #同 s/\\([^12]*?\\)/\\3/ #悲しい s/\\3\)/\\3/ s/\\([^123]*?\\)/\\4/ #さらに悲しい s/\\4\)/\\4/ s/\\([^1234]*?\\)/\\5/ #もっと悲しい s/\\5\)/\\5/ s/\\([^12345]*?\\)/\\6/ #以下同文 s/\\6\)/\\6/ s/\\([^123456]*?\\)/\\7/ s/\\7\)/\\7/ s/\\([^1234567]*?\\)/\\8/ s/\\8\)/\\8/ s/\\([^12345678]*?\\)/\\9/ s/\\9\)/\\9/ ----------------- 上、それほど時間はかかっていません。 が、作業途中、とんでもない虚しさが心の中でどんどん巨大化していった のは事実です。
関連記事一覧ツリー (▼ を押すとツリー全体を一括表示します)
返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
- 以下のフォームから自分の投稿記事を修正・削除することができます -