![使用 sed 打印两个字符串之间的所有行,其中一个作为用户输入](https://linux22.com/image/176602/%E4%BD%BF%E7%94%A8%20sed%20%E6%89%93%E5%8D%B0%E4%B8%A4%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B9%8B%E9%97%B4%E7%9A%84%E6%89%80%E6%9C%89%E8%A1%8C%EF%BC%8C%E5%85%B6%E4%B8%AD%E4%B8%80%E4%B8%AA%E4%BD%9C%E4%B8%BA%E7%94%A8%E6%88%B7%E8%BE%93%E5%85%A5.png)
我正在尝试使用:
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