我有一个文件,其变量从G1到G229。我想用G230到G469代替它们;我该怎么做?我尝试了这个bash脚本,但是没有用:
#!/bin/bash
for num in {1..229}
do
echo G$num
N=$(($num+229))
echo G$N
sed -i -e 's/$G$num/$G$N/g' file
done
sed
解决方案。也许它太棘手和不理想,但它可以工作。作为实验:)。
它sed
通过执行由printf
和paste
用法生成的一个大命令序列来完成一个调用中的所有替换操作。我想将此命令拆分为多行以提高可读性,但不能这样做-它随后停止工作。所以-oneliner:
sed -i -r "$(paste -d'/' <(printf 's/%s\\b\n' G{1..229}) <(printf '%s/g\n' G{230..458}))" file.txt
它正在转换为以下sed
命令:
sed -i -r "s/G1\b/G230/g
s/G2\b/G231/g
s/G3\b/G232/g
s/G4\b/G233/g
...
s/G227\b/G456/g
s/G228\b/G457/g
s/G229\b/G458/g" file.txt
解释
sed -i -r "$(
paste -d'/'
-用斜杠连接左右部分(以3,4步生成)-/
结果是这样的:s/G1\b/G230/g
<(printf 's/%s\\b\n' G{1..229})
-使sed
替换命令的左边部分。例如: s/G1\b
,s/G2\b
,s/G3\b
,等。
\b
-匹配单词边界;也就是说,如果左侧的字符是“单词”字符,而右侧的字符是“非单词”字符,则匹配,反之亦然。信息- GNU sed的,正则表达式扩展。<(printf '%s/g\n' G{230..458})
-制作sed
替代命令的正确部分。例如: G230/g
,G231/g
,G232/g
,等。)" file.txt
- 输入文件。输入
var G1 = value;
G3 = G1 + G2;
G3 = G1 + G2
G3 = ${G1} + G2
var G2 = value;
var G3 = value;
G224 = G3 + G215;
G124 = G124 + G215;
G124 = G124 + G12;
var G4 = value;
var G5 = value;
var G6 = value;
var G59 = value;
var G60 = value;
var G156 = value;
var G227 = value;
var G228 = value;
var G229 = value;
输出
var G230 = value;
G232 = G230 + G231;
G232 = G230 + G231
G232 = ${G230} + G231
var G231 = value;
var G232 = value;
G453 = G232 + G444;
G353 = G353 + G444;
G353 = G353 + G241;
var G233 = value;
var G234 = value;
var G235 = value;
var G288 = value;
var G289 = value;
var G385 = value;
var G456 = value;
var G457 = value;
var G458 = value;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句