Unix 如何在用户输入的情况下使用sed

Unix 如何在用户输入的情况下使用sed,unix,scripting,Unix,Scripting,脚本执行两件事 1.允许用户输入文件名 2.允许用户输入行号以查看内容 echo "Enter the file name" read fname find / -name "$fname" > /tmp/newone.txt if test $? -eq 0 then { echo "File found" echo "The no of line in the file $fname is `cat /tmp/newone.txt | wc|awk '{pri nt $

脚本执行两件事

1.允许用户输入文件名

2.允许用户输入行号以查看内容

echo "Enter the file name"
read fname
  find / -name "$fname" > /tmp/newone.txt

if test $? -eq 0
then
 {
  echo "File found"
  echo "The no of line in the file $fname is `cat /tmp/newone.txt | wc|awk '{pri
nt $1}'`"
  echo  "Enter the line no"
  read  lcnt
  sed '"$lcnt" p' "$fname"
 }
else
 {
   echo "File not found"
 }
fi
发行 1.获取sed部分中的错误

错误消息“sed:-e表达式#1,字符3:命令后额外字符”

如何纠正

2.我可以将“find”的输出重定向到变量吗

比如说

$flloc=/tmp/newone.txt

因此,我将能够使用“$flloc”而不是绝对路径(sed命令中使用变量的方式如下:

echo "Line no: "
read lcnt

sed -n "$lcnt p" $fname
原始表达式的错误在于,在使用单引号时不会解释bash变量。例如:

lcnt=5

# prints $lcnt
echo '$lcnt'

# prints 5
echo "$lcnt"
2) 要将find输出存储到变量,只需执行以下操作:

floc=`find / -name $fname` # Here I'm using backticks, not single quotes.

当我尝试'floc=
find/-name$fname
'获取错误消息'Permission denied'时,我发现问题是由于分配中的一些空间造成的。我应该提到这一点,但是如果find命令找到多个同名文件,您将遇到问题。您真正需要做的是重新考虑让用户输入整个路径,然后验证文件是否存在。使用find还会导致脚本运行不必要的长时间,特别是当用户已经知道要使用哪个文件时。