这个 sed 命令实际上对这些通配符做了什么

这个 sed 命令实际上对这些通配符做了什么

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假设类似于3sin lineUpdate="${lineNumber}s"(这里的意思是替换) ,假设类似于ie(没有错误或未转义的特殊字符)。s$updatenew line

相关内容