替换 shell 脚本或 sed 中的单词

replacing word in shell script or sed

我是新手,但想创建一个执行以下操作的脚本。

假设我有一个

形式的文件
This is line1
This is line2
This is line3

This is line4
This is line5
This is line6

我想用

的形式替换它
\textbf{This is line1}
This is line2
This is line3

\textbf{This is line4}
This is line5
This is line6

也就是说,在段落的开头我想添加一个文本 \textbf{ 并以 } 结束该行。有没有办法搜索行的双端?我在使用 sed 创建这样的脚本时遇到了问题。谢谢!

使用 awk 你可以写类似

的东西
$ awk '!f{ [=10=] = "\textbf{"[=10=]"}"; f++} 1; /^$/{f=0}' input
\textbf{This is line1}
This is line2
This is line3

\textbf{This is line4}
This is line5
This is line6

它有什么作用?

  • !f{ [=11=] = "\textbf{"[=11=]"}"; f++}

    • !f 如果 f 的值为 0,则为真。对于第一行,由于未设置 f 的值,因此将评估为真。如果为真,awk 执行动作部分 {}

    • [=17=] = "\textbf{"[=17=]"}"\textbf{} 添加到行

    • f++ 递增 f 的值,因此它可能不会进入此操作部分,除非 f 设置为零

  • 1 总是正确的。由于缺少操作部分,awk 执行默认操作打印整行

  • /^$/ 模式匹配一​​个空行

    • {f=0} 如果该行为空,则设置 f=0 以便第一个操作部分修改下一行以包含更改

一种使用 sed 的方法

sed '/^$/{N;s/^\(\n\)\(.*\)/\textbf{}/};1{s/\(.*\)/\textbf{}/}' my_file

找到所有只有换行符的行,然后添加下一行。 ==

^$/{N;s/^\(\n\)\(.*\)/\textbf{}/}

在空行下面标记一行并修改

找到文件中的第一行并执行相同的操作== 1{s/\(.*\)/\textbf{}/}

就用awk的段落模式:

$ awk 'BEGIN{RS="";ORS="\n\n";FS=OFS="\n"} {="\textbf{""}"} 1' file
\textbf{This is line1}
This is line2
This is line3

\textbf{This is line4}
This is line5
This is line6