[英]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{ $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
以便第一个动作部分修改下一行以包括更改 使用sed的方法
sed '/^$/{N;s/^\(\n\)\(.*\)/\1\\textbf{\2}/};1{s/\(.*\)/\\textbf{\1}/}' my_file
找到所有只有换行符的行,然后向其添加下一行。 ==
^$/{N;s/^\(\n\)\(.*\)/\1\\textbf{\2}/}
标记空白行下方的行并对其进行修改
在文件中找到第一行并执行相同的== 1{s/\\(.*\\)/\\\\textbf{\\1}/}
只需使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.