Sed bash 脚本多次迭代

Sed bash 脚本多次迭代

我有一项任务,编辑一个名为的文本文件LOLOLOL

HRFJGEKGJHEJGKJVNEJGKJEG BOB BO B

GARY gARY gARY gary

FOG GARY bob bob bob Gary gary

the the bird in the the bush!

LOL MATE!

我有一个名为的 bash 脚本文件lolz.script

#!/bin/bash

sed '1i Hee hee hee\n Ho Ho Ho\n' $1
sed 's/bob/Bob/g' $1

.\lolz.script LOLOLOL在命令行运行,我得到了LOLOLOL文本的多次迭代 - 准确地说,每个 sed 命令一次迭代。

例如,输出显示此处的第一个和第二个 sed 命令(分别应用):

*Hee Hee Hee 
Ho Ho Ho*
HRFJGEKGJHEJGKJVNEJGKJEG BOB BO B

GARY gARY gARY gary

FOG GARY bob bob bob Gary gary

the the bird in the the bush!

LOL MATE!
HRFJGEKGJHEJGKJVNEJGKJEG BOB BO B

GARY gARY gARY gary

FOG GARY *Bob Bob Bob* Gary gary

the the bird in the the bush!

LOL MATE!
  • --- * 在输出中显示文本文件中更改的部分。

而我想要的输出是:

*Hee Hee Hee 
Ho Ho Ho*
HRFJGEKGJHEJGKJVNEJGKJEG BOB BO B

GARY gARY gARY gary

FOG GARY Bob Bob Bob Gary gary

the the bird in the the bush!

LOL MATE!

如你所见,每个 sed 命令都应用了独立在每次打印文本文件时。我需要应用所有 sed 命令一起

请注意,第一个 sed 命令所需的标题是如何在第一次迭代中应用的,而在第二次迭代中却没有应用(但bobBob更改的内容是应用的)。

为什么会发生这种情况?我该怎么做才能使脚本中的命令累积到一个文本文件中?这似乎没有发生在相同格式的awk脚本中。

答案1

简单来说:您调用了sed两次。

如果你在终端中依次运行这些命令,你将得到两组输出。你的脚本只是在自己的 shell 中执行相同的操作。

您可以使用{}对命令进行分组,并将每个命令放在新行上,或者使用;以便所有命令累积地作用于文件,仅调用 sed 一次:

#!/bin/bash
sed '{
     1i Hee hee hee\n Ho Ho Ho\n
     s/bob/Bob/g
}' "$1"

输出./script file

Hee hee hee
 Ho Ho Ho

HRFJGEKGJHEJGKJVNEJGKJEG BOB BO B

GARY gARY gARY gary

FOG GARY Bob Bob Bob Gary gary

the the bird in the the bush!

LOL MATE!

相关内容