我需要选择特定字符串中包含的一些文本并将其输出到文件中。
假设字符串是:ABCDEFGHIJKLMNOP
提取 ABCDEF 之后 K 之前的内容的命令是什么? (即仅限 GHIJ)到另一个文件?
我尝试使用 grep 命令,但由于我对其复杂性了解甚少,所以每次都失败。我一定错过了一些非常基本的东西。
预先非常感谢。
答案1
我假设您正在使用 shell 进行编程,例如bash
.
你会需要sed
。
例如
sed -re 's/^ABCDEF(.*)K.*/\1/'
这使用 grep 来搜索和替换s/thing to find as regexp/thing to replace it with/
\1
表示替换为第一个括号表达式。
答案2
找到匹配项后,grep 会打印整个匹配行。要使其仅打印匹配的文本,您可以使用-o
switch。但是,这会打印该行中的整个匹配字符串。要使其打印您需要的内容,您应该使用后视断言和前视断言。这需要具有 PCRE 支持的 grep。
> grep -Po '(?<=ABCDEF).+(?=K)' <<< 'ABCDEFGHIJKL'
GHIJ
解释:
-P
启用 perl 兼容的正则表达式-o
仅打印匹配的文本,而不打印整行(?<=ABCDEF)
用于匹配 ABCDEF 的正后向断言(?=K)
匹配 K 的正向前瞻断言.+
匹配上述断言之间的所有内容
答案3
发布的任何一个解决方案都没有问题,但如果您愿意,可以在纯 Bash 中执行此操作。
给定一个包含您的值的字符串:
echo $myStr
ABCDEFGHIJKLMNOP
你可以做:
echo $(expr match "$myStr" '.*F\(.*\)K.*')
GHIJ