如何在指定行的开头和结尾插入文本?

时间:2013-06-14 23:31:44

标签: bash sed

我想在指定的数字行的开头和结尾插入一些文本,就像我有这个txt文件一样:

apple
banana
orange
pineapple

要在第一行开头和结尾插入我使用:

while read -r line
do
sed "1i[text_insert]$line" > outputfile1
done < inputfile

while read -r line
do
sed "1i$line[text_insert2]" > outputfile2
done < outputfile1

我获得:

[text_insert]apple[text_insert2]
banana
orange
pineapple

现在我想在第2行添加一些文字:

[text_insert]apple[text_insert2]
[text_insert3]banana[text_insert4]
orange
pineapple

我尝试使用相同的东西,但这不起作用,我找到的所有其他可能性是在指定的行之前插入新行等文本而不是在指定行中添加它。

4 个答案:

答案 0 :(得分:1)

使用awk

$ line=3
$ awk -v num=$line 'NR==num{$0="[Insert New Text] " $0 " [Insert End Text]"}1' file
apple
banana
[Insert New Text] orange [Insert End Text]
pineapple

答案 1 :(得分:0)

请尝试以下代码段:

sed '2s/.*/[text_insert] & [text_insert2]/' file.txt

&具有特殊含义:它是替换 s///左侧部分的匹配部分

前:

$ cat file.txt 
a
b
c

$ sed '2s/.*/[text_insert] & [text_insert2]/' file.txt 
a
[text_insert] b [text_insert2]
c

答案 2 :(得分:0)

您可以使用awk来完成内置NR变量所需的内容。例如:

#!/usr/bin/awk -f
{
    if (NR == 1)
        printf("[text_insert] %s [text_insert2]\n", $0)
    else if (NR == 2)
        printf("[text_insert3] %s [text_insert4]\n", $0)
    else
        print $0
}

答案 3 :(得分:0)

如果awk是一个选项:

$ cat file.txt 
a
b
c

$ awk 'NR==2{printf "[text_insert] %s [text_insert2]\n", $0;next}1' file.txt 
a
[text_insert] b [text_insert2]
c