我在Linux中遇到awk问题。我想让这个脚本工作:
awk -v var="$MYVAR" "{gsub(/export OTHER_VAR=\$OTHER_VAR:/, "var")}1" /etc/myfile
这里的问题是我希望变量“var”被解释(它工作)而变量$ OTHERVAR不被解释,这就是我无法做到的事情。
最后,我想这样做:
我有一个变量
MYVAR=export OTHER_VAR=\$OTHER_VAR:some_text
我想在/ etc / myfile中替换以下模式:
export OTHER_VAR=$OTHER_VAR:/folder/bin
的{p> export OTHER_VAR=$OTHER_VAR:some_text:/folder/bin
。
我希望自己明白......
提前致谢!
西尔
答案 0 :(得分:2)
test_document='export OTHER_VAR=$OTHER_VAR:whatever'
search_regex='^export OTHER_VAR=[$]OTHER_VAR:'
replace_str='export OTHER_VAR=$OTHER_VAR:some_text:'
awk -v search_regex="$search_regex" \
-v replace_str="$replace_str" \
'{gsub(search_regex, replace_str)} {print}' <<<"$test_document"
...正确地作为输出发出:
export OTHER_VAR=$OTHER_VAR:some_text:whatever
请注意一些变化:
$
转义为[$]
。与\$
不同,它在所有引用上下文中一致地进行解析:显式生成正则表达式字符类,而不是具有任何其他潜在含义。{print}
让读者比1
中的awk
更容易理解。答案 1 :(得分:0)
基于您希望将文本替换为新文本的Input_file的假设,您的问题并不是100%清楚。
假设您的Input_file包含以下内容。
cat Input_file
export OTHER_VAR=$OTHER_VAR:/folder/bin
现在,下面的代码将在包含字符串OTHER_VAR的行中添加some_text。
awk '/export OTHER_VAR/{sub(/:/,":some_text:")} 1' Input_file
输出如下。
export OTHER_VAR=$OTHER_VAR:some_text:/folder/bin