0

解決

初期ソリューション

探す 。-type f -exec sed -i ':a;N;$!ba;s/\n //g' {} + | grep -l "672.15687489"

最初の投稿:

ファイル内のパターンを検索する方法を考えていました。ただ、模様が2行にまたがっており、模様がどの部分で分かれているかわかりません。

例:

The pattern:  _"672.15687489"_

ただし、ファイルには、次のいくつかのオプションのいずれかを指定できます。

672.15\n687489

672.156\n87489

672.1568\n7489

672.15687\n489

...

パターンがどのように分割されているかは気にしません。必要なのは、パターンを含むファイルの名前だけです。

4

1 に答える 1

2

陽気な sed をありがとう | grep "ソリューション":

sed -i ':a;N;$!ba;s/\n //g' {} + | grep -l "672.15687489"

しかし実際には、awk を使用するだけです。元のファイルを変更せず、複数のコマンドやパイプを必要とせず、文字と句読点の難解な組み合わせを理解するために James Bond デコーダー リングを必要としない GNU awk ソリューションを次に示します。

$ cat file
foo
672.15
687489
bar
$ gawk -v RS='\0' '{gsub(/\n/,"")} /672.15687489/{print FILENAME; exit}' file
file

知っておく必要があるのは、RS を Null 文字に設定すると、ファイル全体を単一のレコードとして読み取るように gawk に指示することだけです。他の awk はこれをサポートする場合とサポートしない場合がありますが、GNU awk はサポートしています。他の awk ソリューションがあり、それらはすべて投稿された sed+grep ソリューションよりも明確です。

于 2013-03-06T13:41:02.560 に答える