我希望有一些简单的sed命令,当应用于
类型的标准输出时\partie
{Méthode}
{Méthode}
\partie
{Méthode}
{Méthode}
\partie
{Méthode}
{Méthode}
{Méthode}
\partie
{Méthode}
...将其转换为
\partie
{Méthode 1}
{Méthode 2}
\partie
{Méthode 1}
{Méthode 2}
\partie
{Méthode 1}
{Méthode 2}
{Méthode 3}
\partie
{Méthode 1}
据我所知,awk允许在每个“Méthode”之后插入数字,但是如何在“\ partie”出现后将计数器重新置于1?
答案 0 :(得分:2)
使用 awk :
awk '/\partie/{c=0}/^\{/{sub(/\}/," "++c"&")}1' infile
<强>解释强>
awk '/\partie/{c=0}/^\{/{sub(/\}/," "++c"&")}1' infile
^ ^ ^ ^ ^
| | | | |
| | | | 1 at end does default operation print current record/line/row that is print $0
| | | substitute } with space followed by variable c value and matched regexp
| | |
| | look for line starts with {
| |
| reset variable c
|
search for line with \partie
来自doc:
如果替换中出现特殊字符'&amp;',则代表 由regexp匹配的精确子字符串。 (如果正则表达式匹配 不止一个字符串,那么这个精确的子字符串可能会有所不同。)
<强>输入强>
$ cat infile
\partie
{Méthode}
{Méthode}
\partie
{Méthode}
{Méthode}
\partie
{Méthode}
{Méthode}
{Méthode}
\partie
{Méthode}
<强>输出强>
$ awk '/\partie/{c=0}/^\{/{sub(/\}/," "++c"&")}1' infile
\partie
{Méthode 1}
{Méthode 2}
\partie
{Méthode 1}
{Méthode 2}
\partie
{Méthode 1}
{Méthode 2}
{Méthode 3}
\partie
{Méthode 1}
答案 1 :(得分:0)
awk :
$ cat tst.awk
/\partie/{ p=0 }
/Méthode/ && sub(/}/, " " ++p "}"){}1
说明:
/\partie/{ p=0 } # if the line read ($0) matches `\partie`
# set variable p to 0
接下来,如果
/Méthode/ # if the line read matches `Méthode`
&& # AND
sub(/}/, " " ++p "}") # substitite "}" with
# concat of "space, pre-increment of p and }"
# in $0 succeeds
{} # do nothing
1 # print $0
让我们试试命令行:
$ less input.txt | awk '/\partie/{ p=0 } /Méthode/ && sub(/}/, " " ++p "}"){}1'
在input.txt中输入:
$ cat input.txt
\partie
{Méthode}
{Méthode}
\partie
{Méthode}
{Méthode}
\partie
{Méthode}
{Méthode}
{Méthode}
\partie
{Méthode}
或将其称为脚本:
$ awk -f tst.awk input.txt
\partie
{Méthode 1}
{Méthode 2}
\partie
{Méthode 1}
{Méthode 2}
\partie
{Méthode 1}
{Méthode 2}
{Méthode 3}
\partie
{Méthode 1}
答案 2 :(得分:0)
awk 解决方案:
awk -F'}' '/\partie/{ c=0 }/Méthode/{ print $1,++c"}"; next }1' file
-F'}'
- 可选/辅助字段分隔符
/\partie/{ c=0 }
- 在每次\partie
次出现时重置计数器
答案 3 :(得分:0)
$ awk '{sub(/}/," "c++"&")} !NF{c=0} 1' file
\partie
{Méthode 1}
{Méthode 2}
\partie
{Méthode 1}
{Méthode 2}
\partie
{Méthode 1}
{Méthode 2}
{Méthode 3}
\partie
{Méthode 1}