Hatena::ブログ(Diary)

arupaka-_-arupakaの日記

2012-05-25

sedで正規表現で指定したパタン数行削除; コマンドであるパターン以降の数行を削除

]sed正規表現で指定したパタン数行削除; コマンドであるパターン以降の数行を削除

例 以下のtest.txtのxxxから2行後ろまで削除


test.txt

abc

xxx

efd

xyz

cfd

mmm

sed "/xxx/,+2d" test.txt

出力例

abc

cfd

mmm

2010-01-07

ダブルコーテーションの中のカンマを取り除く。

ダブルコーテーションの中のカンマを取り除く。

$ cat tmp
1,2,3,"abc,efg",5
1,2,3,"abc,efg",5
1,2,3,"abc,efg",5
1,2,3,"abc,efg",5
$ sed "s/\"\(.*\),\(.*\)\"/\"\1\2\"/g" tmp
1,2,3,"abcefg",5
1,2,3,"abcefg",5
1,2,3,"abcefg",5
1,2,3,"abcefg",5

解説:

sedは置換コマンド。
\"は「ダブルコーテーション」は
エスケープする必要があるので、
\でエスケープする。
.*は任意の一文字以上の文字列を
表す正規表現
\".*,.*\"で、ダブルコーテーション
で囲まれた,を含む任意の文字列を
表す正規表現。
\(\)で囲んだ正規表現は
\1,\2,...と後で再利用できる。
後半で、選ばれた文字列を再利用することを考えて、.*を\(\)で囲む
と
\"\(.*\),\(.*\)\"
となる。
\1はカンマの前の文字列、
\2はカンマの後ろの文字列に
対応する。

2009-10-21

カタカナをアルファベットに変換

次のルールでカタカナをアルファベットに変換

カタカナの「ニ」と漢字の「二」の

違いに注意。

katakana.kana

ア,_a

イ,_i

ウ,_u

エ,_e

オ,_o

カ,ka

キ,ki

ク,ku

ケ,ke

コ,ko

サ,sa

シ,si

ス,su

セ,se

ソ,so

タ,ta

チ,ti

ツ,tu

テ,te

ト,to

ナ,na

ニ,ni

ヌ,nu

ネ,ne

ノ,no

ハ,ha

ヒ,hi

フ,hu

へ,he

ホ,ho

マ,ma

ミ,mi

ム,mu

メ,me

モ,mo

ヤ,ya

ユ,yu

ヨ,yo

ラ,ra

リ,ri

ル,ru

レ,re

ロ,ro

ワ,wa

ヲ,wo

ン,nn

ァ,la

ィ,li

ゥ,lu

ェ,le

ォ,lo

ガ,ga

ギ,gi

グ,gu

ゲ,ge

ゴ,go

ザ,za

ジ,zi

ズ,zu

ゼ,ze

ゾ,zo

ダ,da

ヂ,di

ヅ,du

デ,de

ド,do

バ,ba

ビ,bi

ブ,bu

ベ,be

ボ,bo

パ,pa

ピ,pi

プ,pu

ぺ,pe

ポ,po

ャ,lya

ュ,lyu

ョ,lyo

ヮ,lwa

ッ,ltu

ヴ,va

ヵ,lka

ヶ,lke

sedの場合sjisダメ文字の影響でうまくいかないい場合は、以下のrubyをつかう。





上のファイルから置き換えスクリプトを作る

awk。

awk -F, 'BEGIN{print "sed \""}{print "s\/"$1"\/"$2"/g"";"}END{print "\""}' ka

takana.kana > kana.sed

sedでsjisダメ文字の影響でうまくいかない場合は、以下のrubyをつかう。

ruby -KSとして実行すのがポイント。

例えば

ruby -KS katakanatoalpha.rb

!#/bin/ruby -KS
a=File.open(ARGV[0]);a.each{|str|
str=str.gsub(//,"_a")
str=str.gsub(//,"_i")
str=str.gsub(//,"_u")
str=str.gsub(//,"_e")
str=str.gsub(//,"_o")
str=str.gsub(//,"ka")
str=str.gsub(//,"ki")
str=str.gsub(//,"ku")
str=str.gsub(//,"ke")
str=str.gsub(//,"ko")
str=str.gsub(//,"sa")
str=str.gsub(//,"si")
str=str.gsub(//,"su")
str=str.gsub(//,"se")
str=str.gsub(//,"so")
str=str.gsub(//,"ta")
str=str.gsub(//,"ti")
str=str.gsub(//,"tu")
str=str.gsub(//,"te")
str=str.gsub(//,"to")
str=str.gsub(//,"na")
str=str.gsub(//,"ni")
str=str.gsub(//,"nu")
str=str.gsub(//,"ne")
str=str.gsub(//,"no")
str=str.gsub(//,"ha")
str=str.gsub(//,"hi")
str=str.gsub(//,"hu")
str=str.gsub(//,"he")
str=str.gsub(//,"ho")
str=str.gsub(//,"ma")
str=str.gsub(//,"mi")
str=str.gsub(//,"mu")
str=str.gsub(//,"me")
str=str.gsub(//,"mo")
str=str.gsub(//,"ya")
str=str.gsub(//,"yu")
str=str.gsub(//,"yo")
str=str.gsub(//,"ra")
str=str.gsub(//,"ri")
str=str.gsub(//,"ru")
str=str.gsub(//,"re")
str=str.gsub(//,"ro")
str=str.gsub(//,"wa")
str=str.gsub(//,"wo")
str=str.gsub(//,"nn")
str=str.gsub(//,"la")
str=str.gsub(//,"li")
str=str.gsub(//,"lu")
str=str.gsub(//,"le")
str=str.gsub(//,"lo")
str=str.gsub(//,"ga")
str=str.gsub(//,"gi")
str=str.gsub(//,"gu")
str=str.gsub(//,"ge")
str=str.gsub(//,"go")
str=str.gsub(//,"za")
str=str.gsub(//,"zi")
str=str.gsub(//,"zu")
str=str.gsub(//,"ze")
str=str.gsub(//,"zo")
str=str.gsub(//,"da")
str=str.gsub(//,"di")
str=str.gsub(//,"du")
str=str.gsub(//,"de")
str=str.gsub(//,"do")
str=str.gsub(//,"ba")
str=str.gsub(//,"bi")
str=str.gsub(//,"bu")
str=str.gsub(//,"be")
str=str.gsub(//,"bo")
str=str.gsub(//,"pa")
str=str.gsub(//,"pi")
str=str.gsub(//,"pu")
str=str.gsub(//,"pe")
str=str.gsub(//,"po")
str=str.gsub(//,"lya")
str=str.gsub(//,"lyu")
str=str.gsub(//,"lyo")
str=str.gsub(//,"lwa")
str=str.gsub(//,"ltu")
str=str.gsub(//,"va")
str=str.gsub(//,"lka")
str=str.gsub(//,"lke")
puts str}

rubyスクリプトを書くためのsed

$ awk -F, 'BEGIN{print "a=File.open(ARGV[0]);a.each{|str|"}{print "str=str.gsub

(\/"$1"\/,\""$2"\")"}END{print "puts str}"}' katakana.kana > katakana.rb

上のファイルから置き換えスクリプトを作る

awk。

awk -F, 'BEGIN{print "sed \""}{print "s\/"$1"\/"$2"/g"";"}END{print "\""}' ka

takana.kana > kana.sed


sedの場合。

rubyスクリプトを書くためのsed

$ awk -F, 'BEGIN{print "a=File.open(ARGV[0]);a.each{|str|"}{print "str=str.gsub

(\/"$1"\/,\""$2"\")"}END{print "puts str}"}' katakana.kana > katakana.rb

ひらがな

!#/bin/ruby -KS
a=File.open(ARGV[0]);a.each{|str|
str=str.gsub(//,"_a")
str=str.gsub(//,"_i")
str=str.gsub(//,"_u")
str=str.gsub(//,"_e")
str=str.gsub(//,"_o")
str=str.gsub(//,"ka")
str=str.gsub(//,"ki")
str=str.gsub(//,"ku")
str=str.gsub(//,"ke")
str=str.gsub(//,"ko")
str=str.gsub(//,"sa")
str=str.gsub(//,"si")
str=str.gsub(//,"su")
str=str.gsub(//,"se")
str=str.gsub(//,"so")
str=str.gsub(//,"ta")
str=str.gsub(//,"ti")
str=str.gsub(//,"tu")
str=str.gsub(//,"te")
str=str.gsub(//,"to")
str=str.gsub(//,"na")
str=str.gsub(//,"ni")
str=str.gsub(//,"nu")
str=str.gsub(//,"ne")
str=str.gsub(//,"no")
str=str.gsub(//,"ha")
str=str.gsub(//,"hi")
str=str.gsub(//,"hu")
str=str.gsub(//,"he")
str=str.gsub(//,"ho")
str=str.gsub(//,"ma")
str=str.gsub(//,"mi")
str=str.gsub(//,"mu")
str=str.gsub(//,"me")
str=str.gsub(//,"mo")
str=str.gsub(//,"ya")
str=str.gsub(//,"yu")
str=str.gsub(//,"yo")
str=str.gsub(//,"ra")
str=str.gsub(//,"ri")
str=str.gsub(//,"ru")
str=str.gsub(//,"re")
str=str.gsub(//,"ro")
str=str.gsub(//,"wa")
str=str.gsub(//,"wo")
str=str.gsub(//,"nn")
str=str.gsub(//,"la")
str=str.gsub(//,"li")
str=str.gsub(//,"lu")
str=str.gsub(//,"le")
str=str.gsub(//,"lo")
str=str.gsub(//,"ga")
str=str.gsub(//,"gi")
str=str.gsub(//,"gu")
str=str.gsub(//,"ge")
str=str.gsub(//,"go")
str=str.gsub(//,"za")
str=str.gsub(//,"zi")
str=str.gsub(//,"zu")
str=str.gsub(//,"ze")
str=str.gsub(//,"zo")
str=str.gsub(//,"da")
str=str.gsub(//,"di")
str=str.gsub(//,"du")
str=str.gsub(//,"de")
str=str.gsub(//,"do")
str=str.gsub(//,"ba")
str=str.gsub(//,"bi")
str=str.gsub(//,"bu")
str=str.gsub(//,"be")
str=str.gsub(//,"bo")
str=str.gsub(//,"pa")
str=str.gsub(//,"pi")
str=str.gsub(//,"pu")
str=str.gsub(//,"pe")
str=str.gsub(//,"po")
str=str.gsub(//,"lya")
str=str.gsub(//,"lyu")
str=str.gsub(//,"lyo")
str=str.gsub(//,"lwa")
str=str.gsub(//,"ltu")
str=str.gsub(//,"va")
str=str.gsub(//,"lka")
str=str.gsub(//,"lke")
str=str.gsub(//,"-")
puts str}