如何使用 sed 在 shell 脚本中添加单引号
Posted
技术标签:
【中文标题】如何使用 sed 在 shell 脚本中添加单引号【英文标题】:How to add single quotes in a shell script using sed 【发布时间】:2019-12-29 10:00:18 【问题描述】:在制作 sed 脚本以查找和替换用户输入以及单引号时需要帮助。输入文件admins.py:
脚本:
read adminsid
while [[ $adminsid == "" ]];
do
echo "You did not enter anything. Please re-enter AdminID"
read adminsid
done
## Please enter Admin's ID
9999999999,8888888888,1111111111
## Script To Replace ADMIN_IDS = [] to ADMIN_IDS = ['9999999999,8888888888,1111111111'] in file
sed -i "s|ADMIN_IDS = \[.*\]|ADMIN_IDS = ['$adminsid']|g" $file
## Current results:
ADMIN_IDS = ['9999999999,8888888888,1111111111']
## Expected results:
ADMIN_IDS = ['9999999999','8888888888','1111111111']
【问题讨论】:
请阅读SE's code quoting syntax。 【参考方案1】:将变量赋值给数据
adminsid=9999999999,8888888888,1111111111
然后使用sed -e
(脚本)选项添加引号和方括号。
echo "$adminsid" | sed -e "s/,/\',\'/g" -e "s/^/[\'/" -e "s/$/\']/"
或将更改应用到文件($file
中的文件名):
sed -i "$file" -e "s/,/\',\'/g" -e "s/^/[\'/" -e "s/$/\']/"
【讨论】:
添加了存储在文件中的文本更改的变体:) 嗨,这个字符串sed -i "$file" -e "s/,/\',\'/g" -e "s/^/[\'/" -e "s/$/\']/"
替换了文件中的所有行。我只想替换包含 [] 括号的行【参考方案2】:
您也可以使用awk
做到这一点:
假设您已将变量分配为:
adminsid=9999999999,8888888888,1111111111
那么解决办法:
echo "$adminsid"| awk -F"," -v quote="'" -v OFS="','" '$1=$1 print "["quote $0 quote"]"'
-F"," -v OFS="','"
:: 将分隔符 (,) 替换为 (',')
print "["quote $0 quote"]"
:: 在行首和行尾添加单引号(')和([)和(])
【讨论】:
【参考方案3】:这可能对你有用(GNU sed 和 bash):
<<<"$adminsid" sed 's/[^,]\+/'\''&'\''/g;s/.*/[&]/'
用单引号将所有非逗号字符括起来,然后用方括号将整个字符串括起来。
【讨论】:
【参考方案4】:将变量中的,
替换为','
,并在开头和结尾添加字符。
sed "s/.*/['&']/" <<< "$adminsid//,/','"
【讨论】:
【参考方案5】:echo "('$adminsid//,/\\',\\'')"
【讨论】:
echo "['$adminsid//,/','']"
请记住,Stack Overflow 不仅仅是为了解决眼前的问题,而是为了帮助未来的读者找到类似问题的解决方案,这需要了解底层代码。这对于我们社区的初学者和不熟悉语法的成员来说尤其重要。鉴于此,您能否在edit 的回答中解释您正在做什么以及为什么您认为这是最好的方法?以上是关于如何使用 sed 在 shell 脚本中添加单引号的主要内容,如果未能解决你的问题,请参考以下文章