파일의 머리글과 바닥글을 제외하고 파일의 각 줄 뒤에 문자열을 추가하고 싶습니다. 그래서 아래 명령을 사용하여 머리글과 바닥글을 제외한 행 범위를 변경했지만 머리글과 바닥글이 삭제되고 머리글과 바닥글 행을 삭제하고 싶지 않습니다.
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
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