머리글 및 바닥글 줄을 제외한 모든 줄 뒤에 문자열을 추가합니다.

머리글 및 바닥글 줄을 제외한 모든 줄 뒤에 문자열을 추가합니다.

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

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/$/.../!1q$

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

관련 정보