【发布时间】:2020-04-17 03:26:50
【问题描述】:
我一直在尝试使用 capture a word between two words 和 Get Word Between two underscores 等等,但没有取得多大成功......
我想在“##”之前找到换行符,这个“##”在“## baba”之后,但不是紧随其后,中间有一些文字。文件中有很多“##”,总是以 \n 开头。请参阅下面的架构:
当前输入文件
##
## baba
rosa rosa rosam rosae ipsum
##
##
找到后插入“helloworld”作为脚本的参数
期望的输出
##
## baba {could also be "foo" or "bar"}
rosa rosa rosam rosae ipsum
helloworld
##
##
我使用以下 script.sh 尽可能接近:
awk -i inplace -v foo=$2 -v new=$1'\n\n' '
f&&/^##/{print new; f=0} {print} /^## baba/{f=1}
' a.md
我想要最后两件事:
- 用参数 $2(变量 foo)替换 baba,
- 将 \n 包含在 ^## 中,使其位于上一行。
非常感谢您的帮助
【问题讨论】:
-
欢迎来到 Stack Overflow。 SO 是面向专业和热情的程序员的问答页面。将您自己的代码添加到您的问题中。您应该至少展示自己为解决这个问题所做的研究。
-
请将预期的输出和您的尝试添加到您的问题中以使其完整。见How to Ask。正则表达式不太可能是正确的解决方案 - Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.。此外 - 当您必须在单个字符串上执行 s/old/new/ 时,sed 是最好的工具,它与涉及多行的任何事情的最佳工具完全不同 - awk 更有可能是候选者。跨度>
-
可能是 helloworld 或者别的什么,我使用 $1 来使用特定的措辞。然后我想用参数 $2(变量 foo)替换 baba。也请赞成这个问题。我受到了抨击,因为我的问题最初写得不好!如果不是负面的话,这将有助于提高知名度...
-
这个问题仍然令人惊讶地模糊,我认为因为你仍然试图描述一个正则表达式来解决问题而不是描述实际问题。我尽我所能更新它以尝试清除它,但请检查现在是否说了你想说的话。在看到包含
##的行之后,您似乎想在包含## baba的第一行之前插入行helloworld2 个空行,对吗?