用不同的值替换第一次和第二次出现的相同文本
我正在寻找一种方法,将文本文件中某个文本的第一次出现替换为值 ${A},并将同一文本在不同行上的第二次出现替换为 ${B}。这可以使用 sed 或 awk 或任何其他 UNIX 工具来实现吗?
工具集相当有限:bash、常见的 UNIX 工具,如 sed、grep、awk 等。不能使用 Perl、Python、Ruby 等...
提前感谢您的任何建议 罗伯特
示例:
...
Text
Text
Text
Text
TEXT_TO_BE_REPLACED
Text
Text
Text
TEXT_TO_BE_REPLACED
Text
Text
Text
...
应替换为
...
Text
Text
Text
Text
REPLACEMENT_TEXT_A
Text
Text
Text
REPLACEMENT_TEXT_B
Text
Text
Text
...
I'm searching for a way to replace the first occurrence of a certain text in a text file with a value ${A} and the second occurrence of the same text, on a different line, with ${B}. Can this be achieved with sed or awk or any other UNIX tool?
The toolset is fairly limited: bash, common UNIX tools like sed, grep, awk etc. Perl, Python, Ruby etc. cannot be used...
Thanks in advance for any advice
Robert
Example:
...
Text
Text
Text
Text
TEXT_TO_BE_REPLACED
Text
Text
Text
TEXT_TO_BE_REPLACED
Text
Text
Text
...
should be replaced with
...
Text
Text
Text
Text
REPLACEMENT_TEXT_A
Text
Text
Text
REPLACEMENT_TEXT_B
Text
Text
Text
...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
sed 运行一次:
Sed with one run:
只需运行脚本两次 - 一次用 ${A} 替换第一次出现,一次用 ${B} 替换(现在第一次)出现。
仅替换一次发生:(
无耻地从 如何使用 sed 只替换文件中的第一个匹配项?)
Just run your script twice - once to replace the first occurrence with ${A}, once to replace the (now first) occurence with ${B}.
To replace just one occurence:
(shamelessly stolen from How to use sed to replace only the first occurrence in a file?)
这是使用 awk 的可能解决方案:
Here is a possible solution using awk:
因此,您可以使用 sed 来执行此操作,如下所示:
首先,我创建了一个名为 test.txt 的文件,其中包含:
我选择使用单词“example”作为要更改的值。
这是命令:cat test.txt | sed -e 's/(example)/test2/2' -e 's/(example)/test1/1'
提供以下输出:
现在 sed 命令被分解:
So, you can use sed to do this like so:
First, I made a file named test.txt that contained:
I choose to use the word "example" to be the value to change.
Here is the command: cat test.txt | sed -e 's/(example)/test2/2' -e 's/(example)/test1/1'
which provides the following output:
Now the sed command broken down:
您还可以使用文本编辑器 ed:
You may also use the text editor ed: