用 sed 替换文本
程序从数据库创建 HTML 文件。有标题和标题之间的内容。
没有固定数量的标题。 在每个标题之后,程序都会放置文本:
$WHITE*("5")$
$WHITE*("20")$
$HRULE$
我需要将这 4 行的每次出现替换为:
$WHITE*("20")$
$HRULE$
$WHITE*("10")$
我不关心使用什么程序:)
我已经尝试过:
sed 's:\$WHITE\*(\"5\")\$\n\n\$WHITE\*(\"20\")\$\n\$HRULE\$:\$WHITE\*(\"20\")\$\
\$HRULE$\
\$WHITE*("10")$:g'
以及各种其他排列
A program creates HTML files from a database. There are headings and stuff in between the headings.
There are not a set amount of headings.
After each heading the program places the text:
$WHITE*("5")$
$WHITE*("20")$
$HRULE$
I need every occurrence of these 4 lines to be replaced with:
$WHITE*("20")$
$HRULE$
$WHITE*("10")$
I am not fussed what program is used :)
I have tried:
sed 's:\$WHITE\*(\"5\")\$\n\n\$WHITE\*(\"20\")\$\n\$HRULE\$:\$WHITE\*(\"20\")\$\
\$HRULE$\
\$WHITE*("10")$:g'
and various other permutations
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果这是您的输入文件,并且这是规范,您可以这样做:
搜索
$WHITE*("5")$
行并将其删除,直到(包括!)下一个空行。然后搜索下一个$HRULE $
行并附加$WHITE*("10")$
行awk
解决方案:这会读取文件并打印每一行 - 这就是
$ WHITE*("10")$
行。代码>1是在那里,除非它找到 $WHITE*("5") 模式,否则它会删除它,读取下一行,如果找到 $WHITE*("20" ,也会删除它。 ) 读取下一行,如果是$HRULE$
则打印该行以及附加的$WHITE*("10")
行。 行。打印HTH
INPUTFILE但我认为情况并非如此,因此您可能需要重新表述您的问题和/或提供更多详细信息。
使用 sed 的更具体的解决方案:(
搜索
$WHITE*("5")$
行并将其删除,直到(包括!)下一个空行。然后搜索下一个$HRULE $
行并附加$WHITE*("10")$
行awk
解决方案:这会读取文件并打印每一行 - 这就是
$ WHITE*("10")$
行。代码>1是在那里,除非它找到 $WHITE*("5") 模式,否则它会删除它,读取下一行,如果找到 $WHITE*("20" ,也会删除它。 ) 读取下一行,如果是$HRULE$
则打印该行以及附加的$WHITE*("10")
行。 行。打印HTH
If that'S your input file, and this is the spec, you can do:
(Searches for the
$WHITE*("5")$
line and deletes it till (including!) the next empty line. Then searches for the next$HRULE$
line and appends an$WHITE*("10")$
line.awk
solution:This reads the file and prints every line - that's why the
1
is there, except if it finds the$WHITE*("5")
pattern it drops it, reads the next line and drops that too. if it finds the$WHITE*("20")
prints it. Reads the next line and if its$HRULE$
then prints that and the appended$WHITE*("10")
line. Else just prints the line.HTH
INPUTFILEBut I assume that's not the case, so you might want to rephrase your question and/or giving some more detailes.
More specific solution with sed:
(Searches for the
$WHITE*("5")$
line and deletes it till (including!) the next empty line. Then searches for the next$HRULE$
line and appends an$WHITE*("10")$
line.awk
solution:This reads the file and prints every line - that's why the
1
is there, except if it finds the$WHITE*("5")
pattern it drops it, reads the next line and drops that too. if it finds the$WHITE*("20")
prints it. Reads the next line and if its$HRULE$
then prints that and the appended$WHITE*("10")
line. Else just prints the line.HTH
更新 #2
来自 sed 常见问题解答,部分 4.23.3
UPDATE #1
Python?
脚本:
输出:
UPDATE #2
From the sed faq, section 4.23.3
UPDATE #1
Python?
the script:
output:
尝试像
Crude 这样的东西,但它应该有效。
Try something like
Crude, but it should work.
这可能对您有用:
说明:
匹配第一个字符串
$WHITE*("5")$
,读取接下来的 3 行并匹配其余部分。使用分组和反向引用来制定输出行。This might work for you:
Explanation:
Match on first string
$WHITE*("5")$
, read the next 3 lines and match on remainder. Use grouping and back references to formulate output lines.