【发布时间】:2022-10-19 22:46:06
【问题描述】:
我想用shell编程制作一个程序编辑文件代码
有命令'在算术扩展 $(()) 中删除 ${}'我在实施中有问题。
我将在下面制作 bash shell 代码
cnt=$(( ${cnt} + ${cnt123} ))
至
cnt=$(( cnt + cnt123 ))
我想删除算术扩展括号中的命令替换括号
我尝试使用这个正则表达式:
sed -Ei 's/(\$\(\()([^\)]*?)\$\{([^\}]+?)\}(.*?)(\)\))/\1\2\3\4\5/g' $file但是,它只是找到了一个最长的。(即使在匹配之前还有另一个匹配)
如果您想查看可视化的正则表达式,请单击此链接visualized image
结果显示如下:
cnt=$(( ${cnt} + cnt123 ))
如何删除嵌套括号中的内部括号? (我应该只使用 awk 或 sed,但如果不可能,使用其他 bash 命令也没关系)
作品示例:
s=$(( ${s} ** 2 ))至s=$(( s ** 2 ))
sum=$(( ${a} + ${b} ))至sum=$(( a + b ))
echo $(( (${var} * ${var2}) / ${var3} ))至echo $(( (var * var2) / var3 ))
echo ${d} $((${t1} + ${t2})) ${e}至echo ${d} $(( t1 + t2 )) ${e}
:我的示例输入文件(不管它做什么)
#! /bin/bash cnt=0 cnt123=1 for filename in * do fname=$(basename $filename) cname=$(echo $fname | tr A-Z a-z) if [ "$fname" != "$cname" ] then if [ -e "$cname" ] then echo "$cname already exists" exit 1 fi echo "$fname is renamed $cname" mv $fname $cname cnt=$(( ${cnt}+ ${cnt123} )) fi done echo "Total count: $cnt" exit 0
【问题讨论】:
-
对于
How to do remove internal bracket in nested bracket? (I should just use awk or sed),请为此添加一些样本,以便也可以在这些样本上测试答案,干杯。 -
找到一个合适的解析器并使用它。这不是 sed 或 awk 的工作
-
@oguzismail 那么,您建议使用什么命令进行解析?
标签: regex bash shell sed nested