sed를 사용하여 두 패턴 사이의 문자 바꾸기

sed를 사용하여 두 패턴 사이의 문자 바꾸기

주어진 패턴이 포함된 줄 뒤의 모든 개행 문자를 탭 문자로 바꾸고 싶습니다.

입력 파일:

$ 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

관련 정보