簡體   English   中英

替換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{ $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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM