sedでxmlを処理する(<>を消したい)
やりたいこと
owncloud使ってて、APIからPROPFINDしたときに返ってくるXMLから情報を引き出したい
<?xml version..>
などを消し去り、データだけを取り出したいのよ。うん。
何故sed??
いやただ単になんとなく。
shellscriptからいじってるからです〜
1.指定パターンの削除
これは簡単で、
$sed -e 's/消したい文字列//g' <ファイル名>
ってすればいい。
2.パターンを書く
これが割とめんどくって。
パターンについて詳しく/一覧はこちらの「sedでこういう時はどう書く?」がわかりやすかったです。
また、これを書くにあたって一番参考にさせていただいたのがこちらの「ワンライナーでお手軽実行可能なsed入門」の「最短マッチさせる」のトピック。
で、一応出来上がったのが
's/<[^>]*>//g'
これは、<
と>
で囲まれたものを全て消去する
パターン解説
s/<[^>]*>//g
s/<[^>]*>//g
パターン | 意味/役割 |
---|---|
[] | 文字クラス?というらしい。[a-z] ならaからzまでの文字のどれか |
[]内の ^ | 続く文字以外の文字を指定す流。[^>] は> 以外の文字のこと |
* | 前のパターンの繰り返し。今回は [^>] を何度も評価する |
言葉で説明(ラフ)すると
s/
-- 置換する設定にする
s/<
-- <
で始まり、
s/<[^>]...
-- >
以外の文字のうちのどれか一つの
s/<[^>]*
-- 0回以上の繰り返し
s/<[^>]*>
-- の後ろが、>
で閉じられているもの。
s/<[^>]*>
-- つまり、<
で始まり、>
以外の文字のうちのどれか一つの0回以上の繰り返しの後ろが>
で閉じられている、文字列にマッチするわけだ。
s/<[^>]*>//
-- //
で置換後の文字をなくすことによって、先のパターンにマッチするものを文字のないものに変換=消す。
s/<[^>]*>//g
-- g
をつけて全てのパターンにマッチする部分を置換する。
...最後の方パターン解説ではない気もしたけどまあいいか
まとめ
<...>
を削除するには、
$ sed -e 's/<[^>]*>//g' <ファイル>
でおk!!
ちなみに"..."
を消したければ
$ sed -e 's/"[^"]*"//g' <ファイル>
etc...
参考にさせていただいた投稿
- sedのチートシート的な! -> sedでこういう時はどう書く?
- 応用テク等が便利 -> ワンライナーでお手軽実行可能なsed入門
Author And Source
この問題について(sedでxmlを処理する(<>を消したい)), 我々は、より多くの情報をここで見つけました https://qiita.com/Cj-bc/items/6cd81b526f89decc1fda著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .