假设我有这个文件:
#!/bin/bash
#t1.sh
#There are so many comments here
#I HAVE A PEN
VAR=0
#I GOT AN APPLE
mixed
#APPLE PEN HERE
VAR1=$APPLE_PEN
现在我想在每个变量之前添加“导出”并在屏幕上打印结果。我用大写写了这些变量名,然后调用了这个 sed 命令:
cat t1.sh|sed -e "s/^[^#][A-Z]/export /g"
但结果删除了第一个字母,例如:
#I HAVE A PEN
export R1=0
#I GOT AN APPLE
mixed
#APPLE PEN HERE
export R2=$APPLE_PEN
这是为什么呢?怎么解决?
顺便说一句,
我可以通过这种方式轻松地在 Notepad++ 上进行常规交换:
sed 也支持这样的交换吗?如果可以的话,如何制作?
最佳答案
您需要在模式周围添加一个捕获组,并在 RHS 部分使用反向引用来恢复结果中捕获的文本:
"s/^\([^#][A-Z]\)/export \1/"
^^ ^^ ^^
您需要转义括号,因为您使用的是 BRE POSIX 正则表达式风格,其中未转义的 (
与文字左括号匹配。
关于regex - sed -e "s/^[^#][A-Z]/export/g"将删除第一个字母...如何防止这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42620036/