DMIDECODE=$cmd_.dmidecode
UNAME=$cmd_.uname
HOSTNAME=$cmd_.hostname
我想编写一个脚本,可以将这些变量放在目录或其子目录中的所有文件的双引号中。例如:
DMIDECODE="$cmd_.dmidecode"
UNAME="$cmd_.uname"
我是一个初学者,但我已经尝试过各种方法来解决这个问题。我试图为上述变量编写正则表达式,然后将变量值括在双引号中。
我写的正则表达式是
^(?!.[a-z])(?!.[0-9]).+[=][$].*$
我记住的事情是变量应该以大写字母开头,后跟=和$符号后跟任何东西。
答案 0 :(得分:0)
您可以使用sed
,如下所示:
sed 's/^\([[:upper:]][[:upper:]_]\{1,\}=\)\(.*\)[[:blank:]]*/\1"\2"/' file.sh
说明:
^ # begin of the line
\( # start of capturing group 1
[[:upper:]] # uppercase character
[[:upper:]] # uppercase or underscore character
\{1,\} # one or more times
= # the literal =
\) # end of capturing group 1
\(.*\) # capturing group 2 contains the value
[[:blank:]]* # optional white space at the end of the line
答案 1 :(得分:0)
另一个使用反向引用来检查行尾的简单替代方法可能是:
sed -i 's/[=]\([$].*$\)/="\1"/' filename
使用-i
选项执行替换。在您的样本文件上调用上述内容的简短测试:
DMIDECODE="$cmd_.dmidecode"
UNAME="$cmd_.uname"
HOSTNAME="$cmd_.hostname"