• 締切済み

教えて下さい

some strings not contain bracket <another string> strings...; なる行の< >内だけを sed で表示する方法を知りたいのですが,わからないので教えて下さい。ヒントは以下の通りです。ヒント: \(some regexp\)にマッチした部分は \1 で利用できる.

みんなの回答

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

半角だとちょっと見にくいけど sed -e 's/.*<\(.*\)>.*/\1/' って感じ。でも、ふたつ以上出てくると、これでは駄目ですね。 # この程度で、ヒントはいらんよ :-)

maxzuki
質問者

お礼

どうもありがとうございました。

maxzuki
質問者

補足

実行した結果求めたいものは出たのですが,どうしてこうなったかわかりません。申し訳ないのですが,実際に起こっていることを少しわかりやすく説明してください。本当にすみません。

関連するQ&A

  • sed 1行スクリプト

    以下は、"PATTERN" にマッチする行の直前の行に、文字列"STRING"を挿入する sed スクリプトで、sed -f で期待どおりの動作をします。 ---------- /PATTERN/ i\ STRING ---------- ここで、PATTERN及びSTRINGは空白文字を含みます。 これを、sed の -e オプションを使って、1行コマンドで実行したいのですが、どうにもこうにもうまくいきません。 sedの基本が身についていないだけなのですが、お知恵を拝借できないでしょうか? 実行環境は次のとおりです。 GNU bash, version 2.04.0(1)-release (i686-pc-msys)

  • ECMAScript:RegExp.exec()メソッドについて

    初めて投稿します。 var re = new RegExp("A", "g"); var res = "ABABAB".match(re); document.writeln(res); 上記のように、文字列に対してString.match()メソッドを使用して正規表現(gフラグつき)とマッチングを行うと結果は 「A,A,A」 とマッチしたAが全て配列として帰ってきますが、 var re = new RegExp("A", "g"); var res = re.exec("ABABAB"); document.writeln(res); 上記のように、文字列に対してregExp.exec()メソッドを使用して正規表現(gフラグつき)とマッチングを行うと結果は 「A」 とマッチしたAが1つしか帰ってきません。 ECMA 262 3rd Editionの仕様では、 (http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/) RegExp.exec()メソッドも、String.match()メソッドと同様に、regExpのオブジェクトを生成時に"g"フラグを付加して、ある文字列とマッチングすると、マッチするものが1件以上存在する場合、新しい配列にマッチしたもの全てを各要素に格納して値を返す動作を行うと(多分?)書かれているみたいなのですが、RegExp.exec()メソッドは、どのブラウザで操作を実行しようとしても、マッチした文字が1件しか帰ってきません。。。 教えていただきたいのは、 『何故、RegExp.exec()メソッドはマッチした文字が1件しか帰ってこないか?』です。 いろんなサイトを調べてみたのですが、どうしてRegExp.exec()メソッドがこのようなふるまいを起こすか断定できませんでした。。。 どなたか、JavaScriptやECMAScriptのロジカル的な部分で詳しい方がいらっしゃいましたら、 よろしくお願いいたします。m(__)m

  • ExcelでRegExpのFunctionの作成

    エクセルVBAで、文字列と正規パターンを引数として渡すと、マッチした文字位置の羅列を","区切りの文字列で返すようなFunctionを作ろうと考えています。なかなかうまく作れなくて困っています。どなたか、詳しいかたいらっしゃいましたら教えて頂けないでしょうか?宜しくお願いいたします。 発生する実行時エラー 実行時エラー'5020': 'Execute'メソッドは失敗しました:'IRegExp2'オブジェクト 追伸:ネットで、自動作成してくれるサイトがありそのコードを参考にアレンジしました。つじつまが合わない部分は、私の改編によるものだと思います。 Function Get_Position_RegExp(MySource As String, MyPattern As String) As Variant Dim MyReg As RegExp Dim MyMatch As MatchCollection Dim i As Match Set MyReg = CreateObject("VBScript.RegExp") With MyReg .Pattern = MyPattern .Global = True Set MyMatch = .Execute(MySource) End With Get_Position_RegExp = "" For Each i In MyMatch Get_Position_RegExp = Get_Position_RegExp & "," & i.FirstIndex + 1 Next Set MyMatch = Nothing Set MyReg = Nothing End Function

  • テキストファイルから最後の単語を抜き取りたい

    1行にスペースで区切られた複数の単語が入った数万行のテキストファイルがあります。 この行の最後の単語だけを抜き取って一つのファイルにしたいと思っています。  aaa bbb 123 abc123 ttt  2222 j ggg (aa) uuu sssss  hh  333 ddd ttt 例えば上のようなファイルなら  ttt  sssss  hh  ttt といった感じで。 awk,sed,perlなんかを使ってやろうかと思っているのですが、 最後の単語にマッチさせるような正規表現や手法がわからないでいます。 すみませんが、ヒントをいただけないでしょうか。

  • 正規表現の置換で、カンマで区切られた語句を""と改行で分ける方法

    正規表現による置換についてお教えください。 Unixのコマンドで置換するときに、sed コマンドを使うと思います。 今、プログラムのソースコードの中に含まれている語句を取得するために、色々いじろうと思っています。 私が最もお聞きしたいのは、正規表現の書き方であることを、まずご理解ください。 ソースコードの中に、 string headline="語句1,語句2,・・・,語句n-1,語句n"; というように、 string headline= で始まっていて、 その後に " "(ダブルクォーテーションの組)で囲まれた部分が1箇所あり、 その部分に、カンマ(,)で区切られた語句がいくつもあるような行があったとき、 その " "の部分を、 "語句1", "語句2", ・・・ "語句n-1", "語句n" のように置換したいのです。 つまり、語句一つ一つをダブルクォーテーションで包んで、1行に語句が1つになるようにしたいのです。 厳密に言えば、stringとheadlineの間などに、タブや空白がいくつあるかわからないという問題なども考える必要があるかもしれません。 とりあえず私が考えたのは、 s/\(string headline="\)\([^,]\)+,\(";\)/\1\2",改行"\3/g です。 s/置換前の文字列のパターン/置換後の文字列のパターン/g となっています。 置換前のパターンで \( \) で囲まれている部分は、置換後のほうで、\1のように参照できます。 ■■でも、私の書いたものって、語句が繰り返し出現することに対応できていないように思われます。■■ 実際に、置換に改行を含めるには、正規表現をファイルの中に書いて、sedの-fオプションで読み込ませることになると思います。 string headline=" " という形をしていないものは、たとえ、" " の中がカンマで区切られていてもそれを分けません。

  • NT4.0のsmtpでメールが送れない

    NT4.0のIISでsmtpを利用し メールをインターネットのホストに送るよう設定しているのですが メールが送れません。 Smtp service could not retrieve error string for error code 1073742381 何か解決のヒントを教えていただければ幸いです。

  • さくらのVPSでのlogwatchのログ内容

    さくらのVPS(centos6.2、Apache2.2.15)でwebサイトを公開しており、logwatchを入れています。 毎日以下のような内容のログがメールで届くのですが、内容の意味がいまいち分からずお知恵をお借りしください。 何か対策をすべき類のものなのでしょうか? 「A total of 743 sites probed the server」の部分の件数の数字は毎日違いますが、いつも大体700~1000前後あります。 個々のipを調べてみるとプロバイダのサーバーなどが出てきます。 このサーバーで公開しているサイトは正常に稼動しております。 --------------------- httpd Begin ------------------------ A total of 743 sites probed the server 1.112.187.35 1.113.155.252 ・ ・ ・ ・ ::1 A total of 1 possible successful probes were detected (the following URLs contain strings that match one or more of a listing of strings that indicate a possible exploit): null HTTP Response 200 Requests with error response codes 400 Bad Request /: 1 Time(s) null: 4 Time(s) 404 Not Found null: 352 Time(s) 500 Internal Server Error null: 1 Time(s) ---------------------- httpd End -------------------------

  • 次の英文の並べ替え

    The act of rattling to tin gives them some sort of excitement, even if the result is (much / to / not / of / the charity / use ) ブリキの献金箱のお金を入れてチャリンと音を 鳴らす行為は、彼ら(チャリティーに従事している人たち)にある種の興奮を与える。 たとえ その結果が (・・・・)この部分なのですが  私は、 not much to use of the charity だと おもったのですが ご指導ください  意味は、チャリティにあまり 役にたたなくても みたいでしょうか?

  • このif not~は挿入か、そうでないか。

    このif not~は挿入か、そうでないか。 We need not hesitate much over a man's love affairs; they are in a sense public, for they are shared with another human  being, if not w ith waiters, chambermaids, that intimate friend; but when a man prays he is quite alone まず、if not~を見た時、これが挿入句で、chambermaidsまでしかかかっていないのか、それとも挿入句ではなく、普通にthat intimate friendまでかかっているのか二通りの考え方が出来ますよね?

  • VB.NETの正規表現をVBAで記述するには

    VB2010.NETのコードをExcel2010のVBAのコードに置き換える作業をしていますが、List1のようにVB.NETのコードには、Inports System.Text.RegularExpressions で.NET正規表現パッケージが使われて、この部分をVBAではどのように記述すればよいのでしょうか。 自分なりにList2のようにしてみましたが、Dim M As MatchのMatchの部分で「ユーザ定義型は定義されていません」というコンパイルエラーが発生します。 参照設定にはSystem.Text.RegularExpressionsが見当たりませんが何を指定すればよいのでしょうか。 Microsoft VBScript Regular Expressions 5.5のRegExpオブジェクトでは後読みができないので大変困っています。 よろしくお願いします。(Windows7) ---List1:VB.NET(正常)--------------- Option Explicit On Option Strict On Imports System.Text.RegularExpressions Module Module1  Sub Main()   Dim SampleText As String = "今日は西暦2014年6月20日です"   Dim M As Match = Regex.Match(SampleText, "(?<=西暦)\d+")   If Not M.Success Then    Console.WriteLine("no match")   Else    Dim MatchedText As String = M.Value    Dim MatchedFrom As Integer = M.Index    Dim MatchedLen As Integer = M.Length    MsgBox("matched [" & MatchedText & "]" & _        " from char#" & MatchedFrom.ToString() & _        " for " & MatchedLen.ToString() & " chars.")   End If  End Sub End Module ---List2:VBA(このコードではエラーになる)----- Option Explicit Sub test()  Dim SampleText As String  Dim M As Match  Dim R As New Regex  Dim MatchedText As String  Dim MatchedFrom As Integer  Dim MatchedLen As Integer  SampleText = "今日は西暦2014年6月20日です"  R = Regex("(?<=西暦)\d+")  M = R.Match(SampleText)  If Not M.Success Then   MsgBox ("no match")  Else   MatchedText = M.Value   MatchedFrom = M.Index   MatchedLen = M.Length   MsgBox("matched [" & MatchedText & "]" & _       " from char#" & MatchedFrom.ToString() & _       " for " & MatchedLen.ToString() & " chars.")  End If End Sub ------------------------------------------