주어진 패턴이 포함된 줄 뒤의 모든 개행 문자를 탭 문자로 바꾸고 싶습니다.
입력 파일:
$ cat File1
NAME1
N1_info
NAME2
N2_info
미래의 "탭" 끝에 몇 가지 플래그를 만듭니다.
sed '/^NAME/s/$/\*/g; /^NAME/!{s/^/+/g}' File1.txt > File2.txt
$ cat File2
NAME1*
+N1_info
NAME2*
+N2_info
그런 다음 원하는 출력을 얻기 위해 "플래그" 사이의 문자를 제거합니다. 두 가지 sed 모드를 시도했지만 둘 다 "File2"를 변경하지 않았습니다.
head File2 | sed -e 's/\(\*\).*\(+\)/\1\t\2/g'
head File2 | sed -n '/\*/,/+/p'
출력은 다음과 같아야 합니다.
$ cat File3
NAME1 N1_info
NAME2 N2_info
답변1
이것이 실제 데이터라면,
paste - - < File1 > File3
당신이 필요한 전부입니다. 기본적으로 붙여넣기는 탭 문자를 구분 기호로 사용합니다.
"N1_info"에 실제로 두 개 이상의 줄이 있는 경우 이는 해결책이 아닙니다. 나는 그것을 할 것이다:
perl -0777 -pe 's/\*\n\+/\t/g' File2 > File3
답변2
그리고 sed
:
$ sed '/^NAME/{$!N;s/\n/\t/}' file
NAME1 N1_info
NAME2 N2_info