以字符串作为输入从文本中提取行

以字符串作为输入从文本中提取行

如何提取与正则表达式字符串匹配的行^li 来自文本(不是文件)下面使用sed什么?

 linux
 loan
 litmus
 launch

我尝试过grep,但找不到在引用的文本(而不是文本文件)中搜索的方法。

grep -n -i "^li" "linux
loan
litmus
launch" 

返回No such file or directory。如果可能的话,我不想在搜索之前将此文本保存为文件。

答案1

你需要使用一个此处字符串( <<<) 这里将字符串作为输入传递给grep,这里的字符串返回一个文件描述符,grep然后可以对其进行操作:

$ grep -ni "^li" <<<"linux
loan
litmus
launch"

输出:

1:linux
3:litmus

如果您的 shell 不支持这里字符串(许多 shell 不支持),您可以打印您的字符串并将其通过管道传输到grep

$ echo "linux
loan
litmus
launch" | grep -n -i "^li"
1:linux
3:litmus

或者使用heredoc ( <<):

$ grep -ni "^li" <<EOF
> linux
> loan
> litmus
> launch
> EOF
1:linux
3:litmus

答案2

你可以这样做:

grep \^li

然后开始输入你的东西。grep将读取终端。sed也会做同样的事情。用于CTRL+D停止它们,并... >saved_output_file输出重定向以保存效果。

答案3

sed您可以使用sed -n '/^li/p'

使用@heemayl 示例

$ echo "linux
> loan
> litmus
> launch" | sed -n '/^li/p'
linux
litmus

相关内容