web-dev-qa-db-ja.com

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

各行に、文字>と<の間に1つの単語が見つかった文が含まれているファイルがあります。例えば:

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

すべての行の ">"と "<"内にWordを出力するシェルから実行するコマンドを探しています。

前もって感謝します。

6
ZakS

awkの場合:

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

これは、フィールド区切り文字を>または<のいずれかに設定し、これら2つの文字の間にある2番目のフィールドを出力します。

sedの場合:

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

これは、()を使用して、>とその後ろに来るものと<とその前に来るものの間にあるものを出力します。

出力

Wallmart
tastes
8
Nasir Riley

grepはどうですか?

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

出力:

Wallmart
tastes

編集:

@Toby Speightコメントに続き、>と<の間に単語があると仮定して、他のコンテキストで>と<が一致しないようにするために、コマンドは

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

以下のコマンドで試してみましたが、うまくいきました

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
0