web-dev-qa-db-ja.com

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

「[」で始まり、特定の文字列で終わるすべての文字列を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
2
testTester

使用する:

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

置換file.txtは実際のファイル名です。

一方、一致させたい場合は[行頭:

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

試してください:

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

正規表現に一致させるコマンド:....... use grep
一致するにはonly記述された正規表現、........使用-o
行の先頭に合わせるには、................. ^^\[
間の文字を照合するには、.use ..*
行末に一致させるには、................... $apal$
照合するものを含むファイル。file.txt

2
user79743

[apalの間のテキストのみが必要な場合は、Perlが適しています

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

GNU grepが(たとえば自作)によってインストールされている)場合、次のことができます。

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

Grepを使用するよりも、sedを使用した方がよいでしょう。

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

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

したがって、あなたの例では:

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

トリックを行う必要があります。

0
mmusante