如何使用 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 脚本中添加单引号的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本之sed使用----替换变量转义字符

shell中,如何替换双引号中内容为某个变量?

转载:shell脚本之sed使用----替换变量转义字符

Shell sed 如何替换单引号,回车符,以及分号

awk中使用$0与shell脚本$1有冲突怎么办

如何匹配sed中的单引号