Bash脚本,用用户输入的版本替换未注释的php_version: "7.2"
:
#!/bin/bash
# Ask desired PHP version
read -p "What version of PHP should be used? (5.6, 7.0, 7.1, or 7.2): " phpVersion
# Replace default php version with desired php version
sed -i "s/^php_version: \"[0-9]+\.[0-9]+\"/php_version: \"${phpVersion}\"/g" fileToSearchReplace.txt
vim报告的fileToSearchReplace.txt
的内容是unix文件:
APIVersion: v1.0.0
name: alpha-local
type: typo3
docroot: public
# php_version: "7.1" # PHP version to use, "5.6", "7.0", "7.1", "7.2"
php_version: "7.2"
router_http_port: "80"
router_https_port: "443"
xdebug_enabled: false
additional_hostnames: []
additional_fqdns: []
provider: default
此方法有效: I checked the RegEx here 使用^php_version: "[0-9]+\.[0-9]+"
进行搜索,使用php_version: "7.0"
进行替换(您可以找到替换项并粘贴到在下面的标签中输入文本。注意,我只能在末尾使用/gm
使搜索生效。我不知道如何在sed
中使用多行? ?
sed
答案 0 :(得分:2)
默认情况下,不能将+
与sed一起使用。像这样自己做+
:
sed -i "s/^php_version: \"[0-9][0-9]*\.[0-9][0-9]*\"/php_version: \"${phpVersion}\"/g" fileToSearchReplace.txt
或使用扩展的正则表达式选项-r
:
sed -r -i "s/^php_version: \"[0-9]+\.[0-9]+\"/php_version: \"${phpVersion}\"/g" fileToSearchReplace.txt
答案 1 :(得分:2)
我认为从一个站点中尝试一个正则表达式不是一个好主意,该站点没有说明它支持哪种正则表达式,并在您的命令中重复使用该正则表达式。
您有一个经典的混合案例,其中站点的正则表达式模式是扩展正则表达式,而您的sed
中的正则表达式使用不支持您的{{1 }}表达式。只需使用[0-9]+
中的-E
开关启用ERE支持
sed
请参阅[POSIX | GNU ]是同一解决方案的变体,其中POSIX版本使用BRE,而GNU版本使用ERE。请仔细阅读POSIX Regular Expressions上的这篇有用的文章,了解正则表达式的两个变体如何工作。
答案 2 :(得分:1)
您可以将此脚本与select
一起使用,该脚本允许用户从菜单列表中选择版本。然后,您可以将选定的选项传递给简化的sed
命令:
select ver in "5.6" "7.0" "7.1" "7.2"; do
sed -i "s/^\(php_version: \).\+/\1\"$ver\"/" fileToSearchReplace.txt
break
done