如何选择并输出字符串中的文本

如何选择并输出字符串中的文本

我需要选择特定字符串中包含的一些文本并将其输出到文件中。

假设字符串是: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 会打印整个匹配行。要使其仅打印匹配的文本,您可以使用-oswitch。但是,这会打印该行中的整个匹配字符串。要使其打印您需要的内容,您应该使用后视断言和前视断言。这需要具有 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

相关内容