我在bash中编写了一个程序,其中将有一个文件中学生的详细信息以及将输入作为roll no传递给它我需要编辑该文件中的特定行。
但是当我尝试传递roll no时,它会在条件匹配时向我显示整个文件以进行编辑。
这是我的计划:
#!/bin/bash
input="/home/kalyan/Desktop/Exercise/studet.txt"
while IFS=":" read -r rollno name s1 s2 s3
do
echo "$rollno"
done < "$input"
read -p "Enter the Roll No:" rollno1
if [ "$rollno"-eq"$rollno1" ]; then
nano studet.txt
cat studet.txt
else
echo "Doesn't match"
fi
或此计划
#!/bin/bash
file="/home/kalyan/Desktop/Exercise/"
FILE="/home/kalyan/Desktop/Exercise/studet.txt"
echo "file to be processed $FILE"
cat $FILE
echo "Reading Roll Number:"
read -r rollno;
if grep $rollno /home/kalyan/Desktop/Exercise/studet.txt
then
echo "Roll No exists"
else
echo "Roll No doesn't exists"
fi
我试图根据 roll no 作为输入来获取学生的记录。 当 roll no 匹配时,我显示他的rollno,名字,三个主题的标记(s1,s2,s3)。 现在我需要编辑符合条件的行。
答案 0 :(得分:0)
我不确定我完全理解你在做什么,但我会这样做(基于问题的标题):
line_number=`grep -n "^$rollno\$" /tmp/a | cut -d : -f 1 "$input"`
nano +"$line_number" studet.txt
这最后一个文件是否与$input
相同?
答案 1 :(得分:0)
我不确定这是否是您想要的...但是说您想要根据运行程序时作为输入的ID来更改用户名:
1:surname1:name1:age1
2:surname2:name2:age2
3:surname3:name3:age3
#!/bin/bash
read -p "Enter the Roll No:" rollno
read -p "Enter new name:" name
awk -F ":" -v roll="$rollno" -v name="$name" 'BEGIN {OFS = ":"} $1==roll {$3=name}1' studet.txt > testfile.tmp && mv testfile.tmp studet.txt
以上脚本会要求用户传递rollno
(exp 1
)和name
值。
然后awk
commad将检查文件中第一个文件中是否存在给定的rollno(文件将使用:
分隔符分割成字段),如果此rollno存在,则同一行的第三个字段将由用户之前传递的值name
更改。
尝试传递1
然后传递一些字符串,然后检查文件。