我想提取一个字符串,该字符串具有文件中所有行的唯一前缀。 虽然我在字符串操作和正则表达式方面表现不佳,但我尝试使用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
命令可能是什么?
答案 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