我有一个名为DOMAIN_PRODUCTION = "https://example.com";
DOMAIN_A = "https://example-A.com";
DOMAIN_B = "https://example-B.com";
DOMAIN_LOCAL = "http://127.0.0.1:3000";
DOMAIN = DOMAIN_A
的文本文件,其内容如下: -
文件内容:
sed
我想根据某些条件用1
命令替换某些东西。当我在if
语句中仅使用1
行时,我能够成功地执行此操作但是当我使用超过else
行时,它只执行env=LOCAL
ip=http://127.1.1.2:3000
if [ $env == LOCAL ]
then
sed 's~DOMAIN_LOCAL = .*$~DOMAIN_LOCAL = "'"$ip"'";~' a.txt
sed 's~DOMAIN = .*$~DOMAIN = '"$env"'~' a.txt
# If I comment the above line, my if loop executes, but If I don't, it doesn't execute if statement, though the condition is correct.
else
sed 's~DOMAIN = .*$~DOMAIN = '"$env"'~' a.txt
fi
语句是的。
我的脚本如下所示: -
DOMAIN_PRODUCTION = "https://example.com";
DOMAIN_A = "https://example-A.com";
DOMAIN_B = "https://example-B.com";
DOMAIN_LOCAL = "http://127.1.1.2:3000"; # Changed here
DOMAIN = DOMAIN_LOCAL # Changed here
输出应该是这样的: -
DOMAIN_LOCAL
理想情况下,它应该替换DOMAIN
和if
的值,但是当我在long.name
循环中使用两个语句时,它不会执行。
我做错了什么?
答案 0 :(得分:0)
将2 sed
命令合并为一个
sed 's~DOMAIN_LOCAL = .*$~DOMAIN_LOCAL = "'"$ip"'";~; s~DOMAIN = .*$~DOMAIN = '"$env"'~' a.txt
答案 1 :(得分:0)
命令
sed 's~DOMAIN_LOCAL = .*$~DOMAIN_LOCAL = "'"$ip"'";~' a.txt
写入stdout。 完成后,您将重新开始使用原始的,未更改的a.txt。 第二个语句的输出与else子句中的命令相同:
sed 's~DOMAIN = .*$~DOMAIN = '"$env"'~' a.txt
您可以使用以下任何方法组合两个sed语句:
sed 'sed1' a.txt | sed 'sed2'
sed -e 'sed1' -e 'sed2' a.txt
sed 'sed1;sed2' a.txt
答案 2 :(得分:0)
您的命令似乎可以找到。 <field name="url" widget="url"/>
命令的问题在于它们只是sed
。您需要替换文件中的更改。
echo
这将在“a.txt”中进行必要的更改。
答案 3 :(得分:0)
我认为awk更适合这个:
% cat gen.awk
ip && $1 == "DOMAIN_LOCAL" {$3 = '"' ip '"'}
dm && $1 == "DOMAIN" {$3 = dm}
1
所有在一起:
env=LOCAL
ip=http://127.1.1.2:3000
if [ "$env" = LOCAL ]; then
awk -v ip="$ip" -v dm="$env" -f gen.awk a.txt
else
awk -v dm="$env" -f gen.awk a.txt
fi
然而,这不会进行现场编辑。但您可以重定向if语句并使用mv
:
if ...; then
...
fi > a.txt.out
mv a.txt.out a.txt
当我们运行awk时,我们将变量设置为gen.awk
脚本:
awk -v variable1=value1
在脚本中,我们用该变量替换第三列,如果它已设置并且该行中的第一列匹配:
ip && $1 == "DOMAIN_LOCAL" { $3 = '"' ip '"' }
故障:
ip # If ip is set and not blank
&& # ... and ...
$1 == "DOMAIN_LOCAL" # If first column equal DOMAIN_LOCAL
{ $3 = '"' ip '"' } # Set third column to be "ip" (the variable, with quotes around)
1
简单打印每一行。