特定の文字で始まり、他の文字で終わるすべての文字列をgrepします。

特定の文字で始まり、他の文字で終わるすべての文字列をgrepします。

「[」で始まり、一部の文字列(「apal」など)で終わるすべての文字列をgrepする必要があります。したがって、これら2つの文字の間のすべての文字も表示されます。入力が与えられると、例えば次のようになります。

[44060]apal223reaea[55000]opoer4nr4on[95749]assad fdfdf Bhassrj sdaapald33qdq3d3da3ded[66000]dsfsldfsfldkj[77000]porpo4o4o3j3mlkfxxxx[101335]KaMMMM MMM lapa[131322]sadasds ddd apaladsdas[138133]sadasdadasddsss KMMapaldsadsadwe[150000]idhoqijdoiwjodwiejdw

結果は嘘です。

[44060]apal
[95749]assad fdfdf Bhassrj sdaapal
[101335]KaMMMM MMM lapal
[131322]sadasds ddd apal
[138133]sadasdadasddsss KMMapal

答え1

使用:

grep -o '\[.*apal' file.txt

file.txt実際のファイル名に変更してください。

一方、[行の先頭で一致させるには、次のようにします。

grep -o '^\[.*apal' file.txt

答え2

努力する:

grep -o '^\[.*apal$' file.txt

正規表現に一致するコマンド: ....... 一致grep
に使用ただ正規表現を書いてください。 ..........-o
行の先頭に一致するために使用します。 .............use ^:^\[
間のすべての文字と一致するために使用します。 .use .:.*
終わりと一致するために使用します。 1行、...............use $apal$
一致させる内容を含むファイルです。 :ファイル.txt

答え3

grepの代わりにsedを使用することをお勧めします。

sed 's/.*\(X.*Y\)/\1/p' < file.txt

X を開始パターンに置き換え、Y を終了パターンに置き換えます。このコマンドは、XからYまで一致するすべてをsedのバッファ1に入れます。パターンで「\1」を置き換えると、バッファが印刷されます。

したがって、あなたの例では次のようになります。

sed 's/.*\(\[.*apal\)/\1/p' < file.txt

これで問題が解決します。

答え4

[との間のテキストだけを望むなら、apalPerlは良い選択です。

perl -lne '/(?<=\[)(.+?)(?=apal)/ and print $1' file

GNU grepがインストールされている場合(たとえば、homebrewを介して)、次のことができます。

grep -Po '(?<=\[).+?(?=apal)' file

関連情報