我是新手,但想创建一个执行以下操作的脚本。
假设我有一个
形式的文件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创建这样的脚本时遇到了麻烦。谢谢!
答案 0 :(得分:2)
使用awk你可以编写像
这样的东西$ awk '!f{ $0 = "\\textbf{"$0"}"; 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{ $0 = "\\textbf{"$0"}"; f++}
!f
如果f
的值为0
,则为真。对于第一行,由于未设置f
的值,因此将评估为true。如果是真的,则awk执行动作部分{}
$0 = "\\textbf{"$0"}"
将\textbf{
和}
添加到该行
f++
会增加f
的值,以便它可能不会进入此操作部分,除非f
设置为零
1
始终为True。由于缺少操作部分,awk执行默认操作以打印整行
/^$/
模式匹配空行
{f=0}
如果该行为空,则设置f=0
,以便第一个操作部件修改下一行以包含更改答案 1 :(得分:0)
使用sed的方法
sed '/^$/{N;s/^\(\n\)\(.*\)/\1\\textbf{\2}/};1{s/\(.*\)/\\textbf{\1}/}' my_file
找到所有只有换行符的行,然后添加下一行。 ==
^$/{N;s/^\(\n\)\(.*\)/\1\\textbf{\2}/}
标记空白行下方的行并进行修改
找到文件中的第一行并执行相同的操作== 1{s/\(.*\)/\\textbf{\1}/}
答案 2 :(得分:0)
只需使用awk的段落模式:
$ awk 'BEGIN{RS="";ORS="\n\n";FS=OFS="\n"} {$1="\\textbf{"$1"}"} 1' file
\textbf{This is line1}
This is line2
This is line3
\textbf{This is line4}
This is line5
This is line6