「[」で始まり、一部の文字列(「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
[
との間のテキストだけを望むなら、apal
Perlは良い選択です。
perl -lne '/(?<=\[)(.+?)(?=apal)/ and print $1' file
GNU grepがインストールされている場合(たとえば、homebrewを介して)、次のことができます。
grep -Po '(?<=\[).+?(?=apal)' file