使用 sed 打印两个字符串之间的所有行,其中一个作为用户输入

使用 sed 打印两个字符串之间的所有行,其中一个作为用户输入

我正在尝试使用:

sed -n '/String1/,/String2/p' Filename

打印 String1 和 String2 之间的所有行。虽然我想添加 String1 作为用户输入,所以,

read $userinput
sed -n '/$userinput/,/String2/p' Filename. 

但由于输入在引号内,因此被读取为字符串$userinput而不是给定的输入。

答案1

简单地像这样:

read userinput                         # without sigil '$'
sed -n "/$userinput/,/String2/p" file  # with double quotes

学习如何在shell中正确引用,这非常重要:

“双引号”包含空格/元字符的每个文字以及每一个扩张:"$var""$(command "$var")""${array[@]}""a & b"。用于'single quotes'代码或文字$'s: 'Costs $5 US'ssh host 'echo "$HOSTNAME"'.看
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words

相关内容