如何处理文件并用行号替换模式

How to process a file and replace a pattern with the line number

提问人:Sam Kent 提问时间:9/3/2023 更新时间:9/3/2023 访问量:67

问:

所以,我正在尝试设计一个小程序,我打算使用一个配置文件,并将 ID 作为行号。下面是一个 .conf 文件的小示例:

ID=_PATTERN_ 
STATE=window 
DIR=_code 
GEO=1200x250+0+32 
CMDS=cd home

我正在尝试找到一种用行号替换的方法。这主要是因为 ID 对于创建文件的人来说并不重要,只是对于使用 .conf 的处理脚本。所以我想,只要通过一些预处理使ID自动生成即可。我正在考虑使用 OR,但我真的不确定要查找什么才能得到答案。_PATTERN_sedawk

Linux Bash awk sed 脚本

评论

0赞 Cyrus 9/3/2023
我们鼓励提问者展示他们迄今为止为解决问题所做的努力。
0赞 Ed Morton 9/3/2023
是字符串还是正则表达式?您想对部分单词进行匹配还是仅对完整单词或其他内容进行匹配?匹配的字符串可以存在于您不希望它匹配的任何位置,例如在 ?它可以在一条线上多次出现吗?等等等等......编辑您的问题以陈述您的所有要求,并显示一个最小的可重复示例,其中包含示例输入和预期输出,给定涵盖所有这些要求的输入。_PATTERN__PATTERN_=
0赞 Ed Morton 9/3/2023
请参阅 how-do-i-find-the-text-that-matches-a-pattern,了解为什么我们需要澄清您的要求,包括您所说的 ._PATTERN_
0赞 Daweo 9/3/2023
如果您有多个文件,每个文件的第一行都有,那么您将获得两个文件的相同 ID,是否可以接受?的值如何改变所述脚本的处理?值是必需的吗?IDIDID
0赞 user1934428 9/4/2023
这是否意味着在文件中您要用行号替换所有出现的行号,发生在哪里?也就是说,在您的示例中,您将拥有 ?_PATTERN__PATTERN_ID=1

答:

1赞 Kaz 9/3/2023 #1

在 shell 提示符下:

$ awk '{ gsub(/_PATTERN_/, FNR); print }'
_PATTERN_
1
_PATTERN_ _PATTERN_
2 2
foo _PATTERN_
foo 3

评论

0赞 Sam Kent 9/3/2023
谢谢你,这正是我想要的!你能为我解释一下 gsub 和 FWR 吗?
1赞 Kaz 9/3/2023
比一本好书或教程更好?不可能。man gawk
1赞 Romeo Ninov 9/3/2023
该脚本可以简化为::)。 将模式替换为字符串,()平均记录数(行),表示打印“已编辑”行。awk '{ gsub(/_PATTERN_/, NR)}1'gsubNRFNR1
0赞 Kaz 9/3/2023
@RomeoNinov 这种简化的行话是“高尔夫”。(见 codegolf.stackexchange.com)。
0赞 Romeo Ninov 9/3/2023
@Kaz,我不太擅长编程高尔夫:)