gpt4 book ai didi

linux - sed 仅在第一场比赛中插入

转载 作者:IT王子 更新时间:2023-10-29 00:23:43 26 4
gpt4 key购买 nike

更新:

使用 sed,我如何才能仅在每个文件的关键字的第一个匹配项上插入(不替换)新行。

目前我有以下内容,但这会为包含匹配关键字的每一行插入,我希望它只为文件中找到的第一个匹配项插入新插入行:

sed -ie '/Matched Keyword/ i\New Inserted Line' *.*

例如:

我的文件.txt:

Line 1
Line 2
Line 3
This line contains the Matched Keyword and other stuff
Line 4
This line contains the Matched Keyword and other stuff
Line 6

改为:

Line 1
Line 2
Line 3
New Inserted Line
This line contains the Matched Keyword and other stuff
Line 4
This line contains the Matched Keyword and other stuff
Line 6

最佳答案

您可以在 GNU sed 中执行此操作:

sed '0,/Matched Keyword/s//New Inserted Line\n&/'

但它不可移植。由于可移植性好,这里在awk中:

awk '/Matched Keyword/ && !x {print "Text line to insert"; x=1} 1' inputFile

或者,如果你想传递一个变量来打印:

awk -v "var=$var" '/Matched Keyword/ && !x {print var; x=1} 1' inputFile

根据您的示例,它们都在关键字第一次出现的之前插入文本行,单独一行。

请记住,对于 sed 和 awk,匹配的关键字是正则表达式,而不仅仅是关键字。

更新:

因为这个问题也被标记为 ,这里有一个简单的解决方案,它是纯 bash,不需要 sed:

#!/bin/bash

n=0
while read line; do
if [[ "$line" =~ 'Matched Keyword' && $n = 0 ]]; then
echo "New Inserted Line"
n=1
fi
echo "$line"
done

就目前而言,这是一个管道。您可以轻松地将其包装在对文件起作用的东西中。

关于linux - sed 仅在第一场比赛中插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9970124/

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