2

私はファイルを持っています。その各行はこの文法で記述できます。

<text> <colon> <fullpath> <comma> <"by"> <text> <colon> <text> <colon> <text> <colon> <text>

例えば。、

needs fixing (Sunday): src/foo/io.c, by Smith : in progress : <... random comment ...>

最初と<fullpath>最初の間にある部分を取得するにはどうすればよいですか<colon><comma>

(これを解析するプログラムを作成する傾向はあまりありませんが、これはjavaccで簡単に実行できるように見えます。、、などの組み込みツールを使用したいと考えていますsedawk

4

4 に答える 4

2

または正規表現の置換

sed -n 's/^[^:]*:\([^:,]*\),.*/\1/p' file

Linuxsed方言; 別のプラットフォームを使用している場合は、-Eオプションが必要な場合や、丸括弧の前に円記号を削除する必要がある場合があります。または、代わりにPerlを使用してください。

perl -nle 'print $1 if m/:(.*?),/' file
于 2012-09-26T18:10:50.480 に答える
1

GNU grepを使用する場合:

grep -oP '(?<=: ).*?(?=,)'

行に後続のコンマがある場合、これは複数のサブストリングを見つける可能性があります。

于 2012-09-26T20:16:23.613 に答える
1

入力が上記のようになると仮定します。

awk '{print $4}' | tr -d ,

awkファイル全体については、上記のコマンドのコマンドの横にファイル名を入力するだけです。

于 2012-09-26T17:37:58.563 に答える
1

このようなものを解析するためにbashスクリプトを使用している場合は、awkやsedなどのツールも必要ありません。

$ text="needs fixing (Sunday): src/foo/io.c, by Smith : in progress : <... comment ...>"
$ text=${text%%,*}
$ text=${text#*: }
$ echo "$text"
src/foo/io.c

これについては、パラメータ拡張bashのマニュアルページを参照してください。

于 2012-09-26T18:35:41.387 に答える