ファイルの各行から文字列を抽出する

ファイルの各行から文字列を抽出する

各行には、>と<文字の間に単語を含む文を含むファイルがあります。たとえば、

Martin went shopping at >Wallmart< and lost his wallet
French food >tastes< great

各行の"">"と"<"内の単語を印刷するシェルで実行するコマンドを探しています。

よろしくお願いします。

答え1

何についてgrep

grep -oP "(?<=\>).*(?=<)"  file

出力:

Wallmart
tastes

編集する:

@Toby Speightのコメントに従って、>と<の間に単語しかないと仮定して、他のコンテキストで>と<が一致しないようにするには、コマンドは次のようになります。

grep -oP "(?<=\>)\w+(?=<)"  file

答え2

のためawk

awk -F '[><]' '{print $2}' file

これにより、フィールド区切り文字が>or に設定され、<2 文字間の内容である 2 番目のフィールドが印刷されます。

のためsed

sed 's|.*>\(.*\)<.*|\1|' file

>()を使用して、それらの間のすべての内容とその背後の内容、およびその前の内容の両方を印刷します<

出力

Wallmart
tastes

答え3

次のコマンドを試してみましたが、うまくいきます。

awk -F ">" '{print $2}' filename| sed  "s/<.*//g"

出力

Wallmart
tastes

Python

#!/usr/bin/python
o=open('filename','r')
for i in o:
    k=i.split('>')[1].split('<')[0].strip()
    print k

出力

Wallmart
tastes

答え4

awk -F ">" '{print $2}' filename| sed  "s/<.*//g"

私はこれを使用し、代わりに長い文字列で動作します>...<...

awk -F "string1" '{print $2}' filename| sed  "s/string2.*//g"

関連情報