查找仅包含相同字符的所有行并替换为相同数量的另一个字符

查找仅包含相同字符的所有行并替换为相同数量的另一个字符

我的目标是将 NEWS 格式( 的输出appstream-util appdata-to-news)转换为 markdown 格式(在 GitHub/GitLab 上使用)。

对我来说,一个很好的近似是从这里开始:

Version 0.5.1
~~~~~~~~~~~~~
Released: 2019-01-03

 * This is a test with a ~ tilde ~~~~
 * Second line

对此

Version 0.5.1
=============
Released: 2019-01-03

 * This is a test with a ~ tilde ~~~~
 * Second line

但我目前的解决方案tr '~' '='给了我这个:

Version 0.5.1
=============
Released: 2019-01-03

 * This is a test with a = tilde ====
 * Second line

查找仅包含的所有行的正则表达式~应该是这样的:^~*$ 但是,如何使用 bash/sed/awk 替换相同数量的=

答案1

您可以对仅包含波形符的行进行模式匹配,然后执行逐字符替换

sed '/^~*$/s/~/=/g'

答案2

我尝试使用下面的 sed 命令,效果很好

Command: sed '/Version/{n;s/~/=/g}' filename

e

n_linux_example ~]# sed '/Version/{n;s/~/=/g}' filename
Version 0.5.1
=============
Released: 2019-01-03

 * This is a test with a ~ tilde ~~~~
 * Second line
[root@praveen_linux_example ~]#

相关内容