如何替换'。'在
下面的输入中的'='字符之前的行部分中使用'_'需要单个sed命令来完成所有三个
echo "few.num.dots=/home/user/.hidden/folder.dot" | sed 's/\./_/g'
必需的输出=> few_num_dots = /家庭/用户/ .hidden / folder.dot
echo "var=nodot" | sed 's/\./_/g'
必需的输出=> VAR =斑点法
echo "var.one=onedot.notthis" | sed 's/\./_/g'
必需的输出=> var_one = onedot.notthis
答案 0 :(得分:2)
您可以使用t
命令使用条件分支。它执行循环,直到替换命令失败,并且该命令替换任何.
字符,后跟等号:
echo "few.num.dots=/home/user/.hidden/folder.dot" |
sed ':a; s/\.\([^=]*=\)/_\1/; ta'
它产生:
few_num_dots=/home/user/.hidden/folder.dot
答案 1 :(得分:1)
perl的?
echo "few.num.dots=/home/user/.hidden/folder.dot" |
perl -pe 's/^[^=]+/ ($x=$&) =~ tr{.}{_}; $x /e'
few_num_dots=/home/user/.hidden/folder.dot
AWK?
awk -F= -v OFS='=' '{gsub(/\./,"_",$1)} 1'
答案 2 :(得分:0)
你也可以这样做,
echo "few.num.dots=/home/user/.hidden/folder.dot" |
sed -e '1,/./s/\./_/' -e '1,/./s/\./_/'
few_num_dots=/home/user/.hidden/folder.dot
首先-e
替换第一次出现的模式.
,然后-e
替换下一个... {/ p>
答案 3 :(得分:0)
使用awk
$ echo "few.num.dots=/home/user/.hidden/folder.dot" |awk '/=/{gsub(/\./,"_",$1)}1' FS="=" OFS="="
few_num_dots=/home/user/.hidden/folder.dot
$ echo "var.one=onedot.notthis" |awk '/=/{gsub(/\./,"_",$1)}1' FS="=" OFS="="
var_one=onedot.notthis
答案 4 :(得分:0)
这可能适合你(GNU sed):
sed 's/=/\n&/;h;y/./_/;G;s/\n.*\n.*\n//' file
插入标记以划分线条,复制线条,翻译字符,附加原始线条并使用标记重新构建线条。