3

以下を含む「script.awk」という名前の単純な awk スクリプトがあります。

/\/some_simple_string/ { print $0;}

私はそれを使用して、以下を含むファイルを解析しています: (使用: cat file | awk -f script.awk)

14 catcat one_two/some_thing
15 catcat one_three/one_more_some_simple_string
16 dogdog one_two/some_simple_string_again
17 dogdog one_four/some_simple_string
18 qweqwe firefire/ppp

スクリプトで、「/some_simple_string[END_OF_LINE]」を完全に反映するストロークのみを印刷したいのですが、2 または 3 は印刷しません。それを行う簡単な方法はありますか?

最も適切な方法は、正規表現に行末のため息を追加することだと思います。したがって、「/some..」で始まり、「..string[END_OF_LINE]」の最後に改行があるストロークのみを解析します。

望ましい出力:

17 dogdog one_four/some_simple_string

混乱して申し訳ありませんが、正規表現で END OF LINE 記号を求めていました。正解は次のとおりです。

/\/some_simple_string$/ { print $0;}
4

4 に答える 4

5

いつでも使用できます:

/\/some_simple_string$/ { print $0 }

つまり、「some_simple_string」だけでなく、「/some_simple_string」の後に続く行末にも一致します (正規表現では $ は行末です)。

于 2013-09-19T07:49:09.260 に答える
3

grep '\some_simple_string$' file | tail -n 1トリックを行う必要があります。

または、本当に使いたい場合awkawk '/\/some_simple_string/{x = $0}END{print x}'

于 2013-09-19T07:38:53.830 に答える
3

一致のグループの最後のものだけを返すには、...

行を変数に格納し、ENDブロックに出力します。

/some_simple_string/ { x = $0 }
END{ print x }
于 2013-09-19T07:39:37.730 に答える