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