Unix 如何在用户输入的情况下使用sed
脚本执行两件事 1.允许用户输入文件名 2.允许用户输入行号以查看内容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 $
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还会导致脚本运行不必要的长时间,特别是当用户已经知道要使用哪个文件时。