如何提取与正则表达式字符串匹配的行^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