![这个 sed 命令实际上对这些通配符做了什么](https://linux22.com/image/1187582/%E8%BF%99%E4%B8%AA%20sed%20%E5%91%BD%E4%BB%A4%E5%AE%9E%E9%99%85%E4%B8%8A%E5%AF%B9%E8%BF%99%E4%BA%9B%E9%80%9A%E9%85%8D%E7%AC%A6%E5%81%9A%E4%BA%86%E4%BB%80%E4%B9%88.png)
lineNumber=$(dialog --inputbox "Enter the line number to update that line: " 8 60 --stdout)
update=$(dialog --inputbox "Please enter the informations as 'name,surname,phone number,e-mail'" 8 60 --stdout)
lineUpdate="${lineNumber}s"
sed -i -e "$lineUpdate/.*/$update/" addressbook.csv
sed -i -e "$lineUpdate/.*/$update/" 地址簿.csv
sed 中的通配符起什么作用?
答案1
除了明显缺乏适当的错误/无效输入处理命令之外,dialog
这些命令可能严肃的(非预期的替换/删除)对预期结果的影响……然而,这不是问题所在,但仍然值得注意。
sed -i -e "$lineUpdate/.*/$update/" addressbook.csv
sed 中的通配符起什么作用?
-e
在您的情况下不需要该选项...只有在嵌套多个sed
脚本时才需要它,例如:
sed -e 's/orig/new/' -e 's/orig2/new2/' ...
.*
是一个正则表达式....
匹配任何字符(行终止符除外)... *
匹配前一个标记,匹配次数为零到无限次,尽可能多次,根据需要返回(贪婪)...即.*
匹配整行… 所以:
sed -i "$lineUpdate/.*/$update/" addressbook.csv
应该用传入的值替换addressbook.csv
传入的行号指定的文件中的整行,$lineUpdate
假设类似于3s
in lineUpdate="${lineNumber}s"
(这里的意思是替换) ,假设类似于ie(没有错误或未转义的特殊字符)。s
$update
new line