我正在编写一个bash脚本,以将文件中的所有B'10'值更改为B'12'。
所以我有一个文件,其中B'10'被多次提及。并且也可以是具有不同长度的B'1010101010“。所有这些都必须是B'12121212”。我试图用SED命令更改它:
sed -i -r "/[B'][10]+/s/10/12/g" filename
sed -i -r "/[B'][[0-9][0-9]]*[10]+/s/10/12/g" filename
我必须指定两次,仅用于匹配B'10'和许多B'1010101010 ..”。如果仅指定第二个命令,它将忽略单个B'10'匹配。因此,此命令是更改值,但是它可以找到的所有“ 10”匹配项都在更改。但是,我只需要在完全B和B字符附近的单列之后更改。
感谢所有帮助!!谢谢。
答案 0 :(得分:2)
如果sed支持标签:
sed ':1 s/\(B\x27\(12\)*\)10/\112/; t1' file # or
sed -E ':1 s/(B\x27(12)*)10/\112/; t1' file
:1
标签1
,(B\x27(12)*)
与B'
匹配,后跟零个或多个12
,将其放入捕获组1
,\1
扩展到捕获组1中保留的值,t1
的意思是“如果执行了成功的替换,请返回标签1
”。答案 1 :(得分:1)
在使用-i选项之前通过gnu sed尝试;
sed -E ":s s/\b(B')((12)*)10(10|\"|')/\1\212\4/ ;ts" filename
答案 2 :(得分:0)
要更改10
之后的所有B'
,请从10
中的最后一个1010...10
开始。
更改完最后一个后,请再次执行并替换新的最后一个10
。
echo "B'1010101010111213" | sed -r ":a; s/B'((10)*)(10)/B'\112/; ta"