从文件中的所有行中提取字符串

时间:2014-09-18 09:02:32

标签: regex linux bash shell sed

我想提取一个字符串,该字符串具有文件中所有行的唯一前缀。 虽然我在字符串操作和正则表达式方面表现不佳,但我尝试使用sed,cut命令,但未能提取字符串。

我的示例文件看起来像

string1 string2 PREFIX_some_string1 string3 string4
string5 string6 PREFIX_some_string2 string7 string8
string9 string10 PREFIX_some_string3 string11 string12
string13 string14 PREFIX_some_string4 string15 string16

我只想将PREFIX_some_string整体提取为

PREFIX_some_string1
PREFIX_some_string2
PREFIX_some_string3
PREFIX_some_string4

命令可能是什么?

5 个答案:

答案 0 :(得分:2)

您可以使用grep

$ grep -o 'PREFIX[^ ]*' file
PREFIX_some_string1
PREFIX_some_string2
PREFIX_some_string3
PREFIX_some_string4

grep匹配PREFIX +匹配任何字符,直到找到空格。它只打印匹配,因为我们使用-o中的grep选项:仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出行

答案 1 :(得分:1)

只是一个gawk命令:

$ gawk 'match($0, "(PREFIX_[^[:blank:]]+)", a) {print a[1]}' file

答案 2 :(得分:1)

对于示例文件,这将执行:

awk '/PREFIX/' RS=" " file
PREFIX_some_string1
PREFIX_some_string2
PREFIX_some_string3
PREFIX_some_string4

这将在该行的任何位置点击PREFIX部分。

答案 3 :(得分:1)

sed -n 's/.* \(PREFIX_[^ ]*\).*/\1/p' YourFile

假设space char是字段/字符串分隔符,结构中没有其他PREFIX_

sed -n 's/\([^ ]\{1,\} \{1,\}\)\{2\}\(PREFIX_[^ ]*\).*/\1/p' YourFile

更准确的版本只能将PREFIX_作为第3个字段

答案 4 :(得分:0)

使用剪切命令的另一种解决方案 的剪切:
-d分隔符作为空间
-f要打印的列

$ cut -d " " -f3 sample.txt

PREFIX_some_string1
PREFIX_some_string2
PREFIX_some_string3
PREFIX_some_string4