gpt4 book ai didi

linux - 如果第一行匹配模式,sed 在文件的第一行插入字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:32:28 26 4
gpt4 key购买 nike

我有一个 sed 问题,我在任何地方都找不到答案:

我有一堆文件,有些文件以字符串 ### 开头,有些则没有。在以 ### 开头的每个文件中,我想在当前第一行之前插入一些多行字符串。

f.e.如果文件看起来像

### the first line

abc cba jfkdslfjslkd

我希望多行字符串插入到顶部

my
multi
line
string

### the first line

abc cba jfkdslfjslkd

文件中的任何其他内容都不应修改。

如果文件不是以 ### 开头,那么我不想编辑它。

最佳答案

使用 sed

首先让我们定义您的字符串:

$ s='my\nmulti\nline\nstring\n\n'

现在,让我们运行一个 sed 命令:

$ sed "1s/^###/$s&/" File
my
multi
line
string

### the first line

abc cba jfkdslfjslkd

工作原理:

  • 1s/old/new/new 替换为 old 如果 old 出现在第一行。

  • 1s/^###/$s&/### 前面替换字符串 $s 如果第一行以 ### 开头。

警告:字符串 s 不应包含任何 sed 事件字符。如果字符串 s 不在您的控制之下,这就是安全违规。

使用 awk

Awk 对变量有合理的处理,这避免了安全问题。

$ s='my\nmulti\nline\nstring\n'
$ awk -v string="$s" 'NR==1 && /^###/ {print string} 1' File
my
multi
line
string

### the first line

abc cba jfkdslfjslkd

关于linux - 如果第一行匹配模式,sed 在文件的第一行插入字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55778736/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com