単一行の個々の線またはパターン間を Grep します。

単一行の個々の線またはパターン間を Grep します。

だから私に必要なのは、私の一致パターン間(および含む)間のテキストだけをgrepすることです。

次のようなものです(テキストは気にしないでください。ただ横説説です:D):

asdgfasd gasd gdas g This will be this one day ksjadnbalsdkbgas asd gasdg 
asdgasdgasdg dasg dasg dasg This will be this next day adf gdsf gdsf sdfh dsfhdfsh
asdf asdf asd fesf dsfasd f This will won' not this day asdgadsgaseg as dvf as d vfa se v asd
dasfasdfdas fase fasdfasefase fasdf This not what shoes day asdjbna;sdgbva;sdkbcvd;lasb ;lkbasi hasdli glais g

だから私が欲しいのはこれです: cat theabovetext|grep -E "^This * day$" 出力:

This will be this one day
This will be this next day
This will won' not this day
This not what shoes day

したがって、基本的に私は「This」と「Day」の間(「This」と「day」を含む)の間に文字数や「This」の前と「Day」の後に何文字があるかに関係なくテキストを取得したいと思います。性格。入力がすべて1行にある場合でも機能する必要があるため、次のようになります。

asdgfasd gasd gdas g This will be this one day ksjadnbalsdkbgas asd gasdg asdgasdgasdg dasg dasg dasg This will be this next day adf gdsf gdsf sdfh dsfhdfsh asdf asdf asd fesf dsfasd f This will won' not this day asdgadsgaseg as dvf as d vfa se v asd dasfasdfdas fase fasdfasefase fasdf This not what shoes day asdjbna;sdgbva;sdkbcvd;lasb ;lkbasi hasdli glais g

次のように出力する必要があります。

This will be this one day This will be this next day This will won' not this day This not what shoes day

ここでの出力はまだ一行にあります。

答え1

GNUを使用すると、grep次のことができます。

grep -o 'This.*day' theabovetext

(ファイルの読み方を知っているので、cat必要はありません。)grep

この-oフラグは、パターンに一致する行部分のみが表示されることを示します。

他のバージョンでもこのフラグをサポートしているようですが、grepPOSIXにはないので必ずしも移植可能ではありません。

答え2

行を個別に処理したいのですが(最初の例)、1行に複数の一致を出力する場合(2番目の例)、grep個別に処理することは不可能だと思います。

ただし、Perl自体で同じ非欲張りな一致を使用すると、This.*?day次のことができます。

$ perl -lne 'print join " ", /This.*?day/g' theabovetext1
This will be this one day
This will be this next day
This will won' not this day
This not what shoes day

そしてシングルライン入力の場合

$ perl -lne 'print join " ", /This.*?day/g' theabovetext2
This will be this one day This will be this next day This will won' not this day This not what shoes day

答え3

Eric Reinoffの答えはほとんどのことをしました。 Steeldriverのコメントは貪欲にならず、特定の行の追加テキストを削除します。

したがって、次のようになります。 grep -oP 'This.*?day' theabovetext出力が複数行にあることを除いて、必要なすべての操作を実行します。

1行に出力を挿入するには、次のようにしますgrep -oP 'This.*?day' theabovetext | tr '\n' ' '。この追加は改行*をスペースに置き換えます。

*これを行うと、すべての出力改行文字が空白に置き換えられます。したがって、初期入力が行で区切られている場合、これらの改行文字は失われます。

関連情報