我有一个像这样的文本文件:
every- 100
atmo- 220
我希望将-
之前的字符替换为*
。因此,预期输出应为
*****- 100
****- 220
我该如何使用sed进行操作?
我尝试使用s/[a-z]*-/*/g
,但是它不起作用,并且用单个-
*
并将其包括在内。
我该如何解决?
答案 0 :(得分:2)
使用标签和分支实现循环:
$ sed ':1; s/^\(\**\)[a-z]/\1*/; t1' <<EOF
every- 100
atmo- 220
EOF
*****- 100
****- 220
答案 1 :(得分:1)
使用Perl:
perl -pe 's/.(?=.*-)/*/g' file
输出:
*****- 100 ****- 220
答案 2 :(得分:1)
使用GNU awk。使用-
作为输入和输出字段分隔符,并在第一列中将所有内容替换为*
。
gawk 'BEGIN{FS=OFS="-"} gsub(/./,"*",$1)' file
输出:
*****- 100 ****- 220
答案 3 :(得分:0)
在sed
中进行编码的另一种方式:
$ sed ':loop ; /[^*]-/s/[^*]/*/ ; t loop' <<END
every- 100
atmo- 220
END
*****- 100
****- 220
以及Perl中的替代编码:
perl -pe 's/[^*]/*/ while /[^*]-/'
答案 4 :(得分:-1)
这可能对您有用(GNU sed):
FROM openjdk:11
EXPOSE 9091
RUN apt-get update && apt-get install python3
ADD target/python-service-0.0.1-SNAPSHOT.jar python-service-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java", "-jar", "python-service-0.0.1-SNAPSHOT.jar"]
这使用换行符作为分隔符,并使用副本获得所需的结果
sed 's/-/\n/;h;s/[^\n]/*/g;G;s/\n.*\n/-/' file
。-
代替换行符。*
替换换行符之间的所有内容。使用循环的另一种选择:
-