4

我想在指定数字行的开头和结尾插入一些文本,就像我有这个 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

4 回答 4

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
于 2013-06-15T03:24:29.340 回答
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
于 2013-06-15T00:19:54.807 回答
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
}
于 2013-06-14T23:47:52.273 回答
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
于 2013-06-14T23:37:36.407 回答