从文件的每一行中提取字符串

从文件的每一行中提取字符串

我有一个文件,其中每一行都包含一个句子,其中在字符 > 和 < 之间找到一个单词。例如:

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

我正在寻找一个从 shell 运行的命令,该命令将在每一行打印“">”和“<”内的单词。

提前致谢。

答案1

关于什么grep

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

输出:

Wallmart
tastes

编辑:

遵循 @Toby Speight 评论,并假设 > 和 < 之间只有单词,为了避免在其他上下文中匹配 > 和 <,命令应该是

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

答案2

为了awk

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

这会将字段分隔符设置为>or<并打印第二个字段,即这两个字符之间的内容。

为了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"

我用过这个,它适用于更长的字符串而不是>and...<...

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

相关内容