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