HiiHahWIKI - making some notes for... -
sedの使い方
をテンプレートにして作成
開始行:
*sedの使い方 [#je1c874a]
''sed''は文字列置換をしてくれるコマンドです。
使い方は至って簡単。正規表現を使わなければ笑
sed 's/置換対象文字列/置換後文字列/'
sed は各行に対して、最初に見付かった文字列しか変換を行わ...
対象全部を置換したい場合は、最後に「''g''」をつけます。
sed 's/置換対象文字列/置換後文字列/g'
実行例は以下の通り
# date "+%H:%M:%S"
17:45:20
#
# date "+%H:%M:%S" | sed 's/:/./' ①
17.45:20
#
# date "+%H:%M:%S" | sed 's/:/./g' ②
17.45.20
#
# date "+%H:%M:%S" | sed 's/://g' ③
174520
#
実行例の説明
-①:gをつけない場合、パターンにマッチした最初の文字列「:...
-②:gをつけた場合、パターンにマッチしたすべての文字列「:...
-③:置換後文字列を指定しなかった場合、パターンにマッチし...
へー、簡単。
***リンク [#vccba018]
このサイトをみて使ってみました。
-[[UNIXの部屋 コマンド検索: sed:http://x68000.q-e-d.net/...
-http://www.jp.freebsd.org/cgi/mroff.cgi?sect=1&cmd=&lc=1...
-http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8...
-http://www.edu.ics.saitama-u.ac.jp/~j0114ky/first/html_e...
-http://www.kabipan.com/computer/sed/index.html
***サンプル [#cc442b93]
本のタイトルの第~巻を除去する正規化処理
[root@localhost tmp]# cat test.txt
坂の上の雲第1巻
坂の上の雲第12巻
[root@localhost tmp]# cat test.txt | | sed s/第[0-9]巻//g
坂の上の雲
坂の上の雲第12巻
[root@localhost tmp]# cat test.txt | sed s/第[0-9]*巻//g
坂の上の雲
坂の上の雲
*** サンプル2 改行を含むXMLの値を取り出す [#dd0bbb17]
こんなファイルがあります。
<resumptionToken completeListSize="10505" cursor="">
2010-12-08/2010-12-15/zassaku/dcndl_porta/R00000...
</resumptionToken>
これを、こんな感じでsedすると
sed -e '/cursor=\"\">/N;s/\n//' test.xml | grep cursor |...
こんな感じになります。
2010-12-08/2010-12-15/zassaku/dcndl_porta/R000000004-I00...
*** サンプル3 XMLで対象のタグの値を抽出する [#xd43cb93]
XMLから、最初に出現する<repository_no>タグの値を出力する。
head -1 x* | sed -n -e 's/.*<repository_no>\(.*\)<\/repo...
*** サンプル4 指定した行数を削除する [#l9723423]
指定した行数を削除します。
例えば、test.txtの1行目から14行目までを削除します。
sed '1,14d' test.txt
*** サンプル5 正規表現のパターンで、途中のパターンだけOR...
たとえば、以下のようなログがあります。
# head -3 test.log
2011-06-01 10:56:15,MOBILE,坂本龍馬,commit=検索&s=坂本龍...
2011-06-01 22:13:10,MOBILE,冠木健,commit=検索&s=冠木健,1,0
2011-06-01 23:20:42,PC,麻実れい,commit=検索&s=麻実れい,3...
このログの3項目目だけほしい場合は、awkで取り出せます。
# head -3 test.log | awk -F, '{print $3}'
坂本龍馬
冠木健
麻実れい
これをsedで取り出す場合、以下のような正規表現で取り出せま...
# head -3 test.log | sed -e 's/^[0-9]\{4\}-[0-9]\{2\}-[0...
坂本龍馬
冠木健
麻実れい
この場合はawkで取り出せるけど、awkでうまくはまらない時は...
■ちょっとだけ解説
最初の日付のパターンは同一で、
^[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\}:...
そのあとのPC/MOBILEはどちらかのパターンがマッチして、
\(PC\|MOBILE\\)
ほしいのはその次の「,」までなので、「,」以外の文字でマッ...
\([^,]*\)
「,」以降はいらないので
,.*
でマッチさせて、2番目のパターンスペースを出力すればOK
/\2/'
って感じです。
間違ってたら指摘してほしいっすw
***サンプル6 ある行数の内容を置き換える [#h9df7d3f]
こんなファイルがあるとします。
aaaaa
bbbbb
ccccc
dddd
eee
#TARGET_URL=http://111.222.333.444/
TARGET_URL=http://55.66.77.88.com/
このファイルのTARGET_URLを別なURLに書き換えたい場合、こん...
sed -i 10c\TARGET_URL=http://test.com/ test.txt
※「-i」オプションで、ファイルの内容を書き換えられます。&br;
※「-i」ではなくリダイレクトすると、元のファイルが消えちゃ...
終了行:
*sedの使い方 [#je1c874a]
''sed''は文字列置換をしてくれるコマンドです。
使い方は至って簡単。正規表現を使わなければ笑
sed 's/置換対象文字列/置換後文字列/'
sed は各行に対して、最初に見付かった文字列しか変換を行わ...
対象全部を置換したい場合は、最後に「''g''」をつけます。
sed 's/置換対象文字列/置換後文字列/g'
実行例は以下の通り
# date "+%H:%M:%S"
17:45:20
#
# date "+%H:%M:%S" | sed 's/:/./' ①
17.45:20
#
# date "+%H:%M:%S" | sed 's/:/./g' ②
17.45.20
#
# date "+%H:%M:%S" | sed 's/://g' ③
174520
#
実行例の説明
-①:gをつけない場合、パターンにマッチした最初の文字列「:...
-②:gをつけた場合、パターンにマッチしたすべての文字列「:...
-③:置換後文字列を指定しなかった場合、パターンにマッチし...
へー、簡単。
***リンク [#vccba018]
このサイトをみて使ってみました。
-[[UNIXの部屋 コマンド検索: sed:http://x68000.q-e-d.net/...
-http://www.jp.freebsd.org/cgi/mroff.cgi?sect=1&cmd=&lc=1...
-http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8...
-http://www.edu.ics.saitama-u.ac.jp/~j0114ky/first/html_e...
-http://www.kabipan.com/computer/sed/index.html
***サンプル [#cc442b93]
本のタイトルの第~巻を除去する正規化処理
[root@localhost tmp]# cat test.txt
坂の上の雲第1巻
坂の上の雲第12巻
[root@localhost tmp]# cat test.txt | | sed s/第[0-9]巻//g
坂の上の雲
坂の上の雲第12巻
[root@localhost tmp]# cat test.txt | sed s/第[0-9]*巻//g
坂の上の雲
坂の上の雲
*** サンプル2 改行を含むXMLの値を取り出す [#dd0bbb17]
こんなファイルがあります。
<resumptionToken completeListSize="10505" cursor="">
2010-12-08/2010-12-15/zassaku/dcndl_porta/R00000...
</resumptionToken>
これを、こんな感じでsedすると
sed -e '/cursor=\"\">/N;s/\n//' test.xml | grep cursor |...
こんな感じになります。
2010-12-08/2010-12-15/zassaku/dcndl_porta/R000000004-I00...
*** サンプル3 XMLで対象のタグの値を抽出する [#xd43cb93]
XMLから、最初に出現する<repository_no>タグの値を出力する。
head -1 x* | sed -n -e 's/.*<repository_no>\(.*\)<\/repo...
*** サンプル4 指定した行数を削除する [#l9723423]
指定した行数を削除します。
例えば、test.txtの1行目から14行目までを削除します。
sed '1,14d' test.txt
*** サンプル5 正規表現のパターンで、途中のパターンだけOR...
たとえば、以下のようなログがあります。
# head -3 test.log
2011-06-01 10:56:15,MOBILE,坂本龍馬,commit=検索&s=坂本龍...
2011-06-01 22:13:10,MOBILE,冠木健,commit=検索&s=冠木健,1,0
2011-06-01 23:20:42,PC,麻実れい,commit=検索&s=麻実れい,3...
このログの3項目目だけほしい場合は、awkで取り出せます。
# head -3 test.log | awk -F, '{print $3}'
坂本龍馬
冠木健
麻実れい
これをsedで取り出す場合、以下のような正規表現で取り出せま...
# head -3 test.log | sed -e 's/^[0-9]\{4\}-[0-9]\{2\}-[0...
坂本龍馬
冠木健
麻実れい
この場合はawkで取り出せるけど、awkでうまくはまらない時は...
■ちょっとだけ解説
最初の日付のパターンは同一で、
^[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\}:...
そのあとのPC/MOBILEはどちらかのパターンがマッチして、
\(PC\|MOBILE\\)
ほしいのはその次の「,」までなので、「,」以外の文字でマッ...
\([^,]*\)
「,」以降はいらないので
,.*
でマッチさせて、2番目のパターンスペースを出力すればOK
/\2/'
って感じです。
間違ってたら指摘してほしいっすw
***サンプル6 ある行数の内容を置き換える [#h9df7d3f]
こんなファイルがあるとします。
aaaaa
bbbbb
ccccc
dddd
eee
#TARGET_URL=http://111.222.333.444/
TARGET_URL=http://55.66.77.88.com/
このファイルのTARGET_URLを別なURLに書き換えたい場合、こん...
sed -i 10c\TARGET_URL=http://test.com/ test.txt
※「-i」オプションで、ファイルの内容を書き換えられます。&br;
※「-i」ではなくリダイレクトすると、元のファイルが消えちゃ...
ページ名: