如何在模式之前和行号之后使用sed插入一行?

Noh*_*sib 28 unix shell awk sed

如何sed在模式之前和行号之后使用行插入文件?以及如何在shell脚本中使用相同的内容?

这会在每行前面插入一行代码:

sed '/Sysadmin/i \ Linux Scripting' filename.txt
Run Code Online (Sandbox Code Playgroud)

这会使用行号范围更改此值:

sed '1,$ s/A/a/'
Run Code Online (Sandbox Code Playgroud)

那么现在如何使用这些(我不能)sed在模式之前和行号或其他方法之后使用行插入文件?

Jon*_*ler 26

您可以编写sed脚本文件并使用:

sed -f sed.script file1 ...
Run Code Online (Sandbox Code Playgroud)

或者您可以使用(多个)-e 'command'选项:

sed -e '/SysAdmin/i\
Linux Scripting' -e '1,$s/A/a/' file1 ...
Run Code Online (Sandbox Code Playgroud)

如果你想在一行之后追加一些东西,那么:

sed -e '234a\
Text to insert after line 234' file1 ...
Run Code Online (Sandbox Code Playgroud)


gle*_*man 8

我假设您只想在当前行号大于某个值时插入模式前的行(即如果模式出现在行号之前,则不执行任何操作)

如果你不依赖于sed:

awk -v lineno=$line -v patt="$pattern" -v text="$line_to_insert" '
    NR > lineno && $0 ~ patt {print text}
    {print}
' input > output
Run Code Online (Sandbox Code Playgroud)