替换 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
我是新手,但想创建一个执行以下操作的脚本。
假设我有一个
形式的文件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