在除页眉和页脚行之外的每一行之后附加字符串

在除页眉和页脚行之外的每一行之后附加字符串

我想在文件的每一行后面附加一些字符串,除了文件的页眉和页脚之外。因此,我使用下面的命令来更改除页眉和页脚之外的行的范围,但它删除页眉和页脚,并且我不想删除页眉和页脚行。

sed -n '2,5p; '"$str_var"'' abc.dat > abc.dat.temp

即使我尝试跳过标题并使用下面的命令修改其他行,但页脚/预告行没有选项来保持其不变。

sed '1! s/$/'"$str_var"'/g' abc.dat > abc.dat.temp

任何关于如何更改除页眉和页脚行之外的文件所有行的建议,并且该命令不应删除页眉/页脚行。

答案1

假设页眉和页脚各一行:对于第一行和最后一行,跳过进一步的处理。默认情况下打印每一行。

$ seq 10 | sed '1n; $n; s/$/ hello/'
1
2 hello
3 hello
4 hello
5 hello
6 hello
7 hello
8 hello
9 hello
10

答案2

使用sed和 以不同的方式附加到s/$/.../!第一行之外的所有行,如果它是最后一行,1则将uit提前。q$

sed '$q ;1 !s/$/ append/' <(seq 10)
1
2 append
3 append
4 append
5 append
6 append
7 append
8 append
9 append
10

或者使用awk

awk 'BEGIN{ getline line} {print line; line=$0 " append";} END{print $0}' <(seq 10)
1
2 append
3 append
4 append
5 append
6 append
7 append
8 append
9 append
10

答案3

对于awk任意行数的文件:

$ awk -v last=$(wc -l < input) 'NR!=1 && NR!=last { print $0 " and more stuff" } NR==1||NR==last { print }' input
header
foo and more stuff
bar and more stuff
baz and more stuff
quux and more stuff
freeble and more stuff
bletch and more stuff
footer

使用 获取输入文件中的行数wc,并将其存储在awk变量中。然后单独打印页眉和页脚,以及带有后缀的所有其他行:

NR!=1 && NR!=last {
   print $0 " and more stuff"
} 
NR==1 || NR==last {
    print
}

答案4

我已经通过以下方法完成了

输入文件

10
20
30
40

命令

 for i in `awk '{print NR}' inputfile| wc -l| awk '{print $1-1}'`; do sed '2,'$i's/$/praveen/g' inputfile;done

输出

10
20praveen
30praveen
40

相关内容