나는 그렇게 최종 출력이됩니다에서 나는 새로운 라인을 제거하는 방법새로운 라인을 제거
1 test test
처럼 파일이 있습니다
1 test test
나는 이미 어떤 sed를 시도했지만 나는 그것을 작동시킬 수 없었다.
나는 그렇게 최종 출력이됩니다에서 나는 새로운 라인을 제거하는 방법새로운 라인을 제거
1 test test
처럼 파일이 있습니다
1 test test
나는 이미 어떤 sed를 시도했지만 나는 그것을 작동시킬 수 없었다.
첫 번째 줄을 제외한 숫자로 시작하는 경우 조금 더 똑똑해 줄 앞에서 새 줄을 인쇄 할 수 있습니다.
awk 'BEGIN{ORS="";} NR==1 { print; next; } /^[[:digit:]]/ { print "\n"; print; next; } { print; }'
awk 스크립트 :
BEGIN { ORS=""; } # default: no newline between output records
NR==1 { print; next; } # first line: print
/^[[:digit:]]/ { print "\n"; print; next; } # if starts with a digit: print newline before
{print;} # other lines (next; has not been called yet)
'나오지'를 이용하여 용액 :
입력 파일 (INFILE)
1 test
test
2 two
3 three
4 four
five
six
7 seven
eight
9 nine
'SED'프로그램 (script.sed을) :
/[0-9]\+/ {
: a
N
/\n[0-9]\+/ {
P
s/.*\n//
}
t a
}
y/\n//
실행 :
$ sed -f script.sed infile
출력 : SED으로 달성하기 매우 간단하다
1 test test
2 two
3 three
4 four five
six
7 seven eight
9 nine
. 작동 원리
$ sed '/^[0-9]/{N; s/\n/ /;}' numbered
1 abc def
ghi
2 jkl mno
3 pqr 4 stu
vxw
: 트릭을 할 것입니다
$ cat numbered
1 abc
def
ghi
2 jkl
mno
3 pqr
4 stu
vxw
명령 sed '/^[0-9]/{N; s/\n/ /;}' numbered
아래의 파일을 고려해 현재 행은 숫자로 시작 않을 경우 첫째, 그것은 확인 :
/^[0-9]/
/^[0-9]/
은 address이며 숫자로 시작하는 줄만 일치합니다. 일부 줄이 일치하면 주소 뒤에 오는 명령이 실행됩니다.
이 경우이 명령은 기능 목록을 여는 {
입니다. 함수 목록은 두 개 이상의 명령을 하나만있는 것처럼 집계합니다. 이 경우 함수 목록에 두 개의 명령이 있습니다.
N
이 명령은 줄 바꿈 및 패턴 영역에 다음 줄을 추가합니다 : 첫 번째는 N
명령입니다. 다음주기는 현재주기 후에 더 이상 고려되지 않습니다.
s/\n//
그래서, N
에 의해 추가 된 줄 바꿈은 공백으로 대체됩니다 : 다음 명령은 공백으로 줄 바꿈을 대체 s///
입니다. 그런 다음 기능 목록을 }
으로 닫아야합니다.그 결과는 다음과 같습니다
/^[0-9]/{
N
s/\n//
}
이 기능 목록 내부의 명령은 세미콜론으로 구분해야합니다
/^[0-9]/{N;s/\n/ /;}
주 그 라인 시작하는 경우 숫자로 시작하는 다른 행 다음에 숫자가 오면 다음 행이 이전 행과 조인되며 명령이 그 행에 적용됩니다.
이 트릭을 수행해야합니다
sed -n '$!{ 1{x;d}; H}; ${ H;x;s|\n\([^0-9]\)| \1|g;p}' inputfile
입력 :
1 test1
test1
2 test2
test2
test2
3 test3
4 test4
출력 : n을 \ 'tr` 그럴`처럼`사용할 수 있습니다
1 test1 test1
2 test2 test2 test2
3 test3
4 test4
''
Rahul
을 제거하지만 어떻게해야합니까? 다음 줄에 너비가 시작되지 않으면 eck? 이전 줄 바꿈을 제거하십시오. 떨어져 모든 것들은 할 수 있지만 그들을 결합 수 없습니다. – justahuman