내 데이터:
Question Nr. 311
Main proteins are in the lorem ipsun
A Lorem RNA test
B Cells
C Metoclom
D Cells
E Muscles
Question Nr. 312
Main proteins are in the lorem ipsun
A Lorem
B Cells
C Metoclom
D Cells
E Muscles
...
원하는 형식:
\item
Main proteins are in the lorem ipsun
A Lorem RNA test
B Cells
C Metoclom
D Cells
E Muscles
\item
Main proteins are in the lorem ipsun
A Lorem
B Cells
C Metoclom
D Cells
E Muscles
\item ...
각 옵션을 새 줄에 표시할 계획입니다.
내 시도:
sed s/Question Nr.*/\item/g
이것은 모두를 다음으로 대체해야합니다질문 번호 [어떤 질문이든]
- 문제는 뒤에 오는 것을 감지하는 것입니다. 왜냐하면 많은 옵션이 있을 수 있지만 옵션은 \n\n
줄 바꿈으로 끝나기 때문입니다.
반단계 문제는 다음과 같습니다.
\item
Main proteins are in the lorem ipsun
A Lorem RNA test
B Cells
C Metoclom
D Cells
E Muscles
\item
Main proteins are in the lorem ipsun
A Lorem
B Cells
C Metoclom
D Cells
E Muscles
기타 과제
- 단어를 대문자로 표기하세요.HIV그리고RNA옵션에서 아래의 일부 솔루션은 뒤에 빈 줄을 삽입합니다.안녕하세요그리고수석 간호사
sed
내가 원하는 출력을 어떻게 전달/가져오나요 perl
?
답변1
그리고 sed
:
sed 's/^Question Nr\..*/\\item/; s/^\([A-Z] .*\)/\n\1/' file
- 첫 번째 명령을 질문 과 유사한 명령 으로
s///
바꾸십시오 .Question Nr.
\item
sed
- 두 번째는
A
대문자로 시작하는 줄을 from 으로 바꾸지Z
만, 그 뒤에 공백이 오는 줄만 바꿉니다. 전체 행은 그 자체로\1
개행 문자 로 대체됩니다\n
.
산출:
\item
Main proteins are in the lorem ipsun
A Lorem
B Cells
C Metoclom
D Cells
E Muscles
\item
Main proteins are in the lorem ipsun
A Lorem
B Cells
C Metoclom
D Cells
E Muscles
답변2
tr
+를 사용하는 또 다른 방법 sed
:
tr -s \\n <infile | sed '$!G;s/Question Nr.*/\\item/'
tr
모든 줄 바꿈을 누른 다음 sed
마지막 줄을 제외한 모든 줄에 공간 보존 내용(빈 줄 바꿈)을 추가하고 로 바꿉니다 Question Nr.*
. \item
이 방법을 사용하면 파일을 내부에서 편집할 수 없습니다. tr
정규식보다 빠르기 때문에 여기를 선택했습니다 ( 솔루션만큼 깨끗 sed
하지는 않더라도 ).sed
답변3
그렇지 않다면 sed
Perl의 "단락 모드"가 이 목적에 적합합니다. 에서 man perlrun
:
-0[octal/hexadecimal]
specifies the input record separator ($/) as an octal or
hexadecimal number. [...]
The special value 00 will cause Perl to slurp files in paragraph
mode. [...]
따라서 -00
Perl을 사용하면 "line"을 줄 종결자로 사용되는 단락으로 정의하도록 지시됩니다 \n\n
. 이를 염두에 두고 다음을 수행할 수 있습니다.
$ perl -00pe 's/Question.*/\\item/; s/[A-Z] /\n$&/g;' file
\item
Main proteins are in the lorem ipsun
A Lorem
B Cells
C Metoclom
D Cells
E Muscles
\item
Main proteins are in the lorem ipsun
A Lorem
B Cells
C Metoclom
D Cells
E Muscles
Question
첫 번째 대체 연산자는 string 과 일치하는 모든 줄을 대체하고 \item
, 두 번째 대체 연산자는 각 대문자 앞에 개행 문자를 추가한 다음 공백을 추가합니다.
답변4
지금 awk
:
awk '$1 ~ /[ABCDEM]/ {print $0"\n"} $1 ~ /Question/ {print "\\item"}' inputfile
줄이 A, B, C, D, E 또는 M(Main의 경우)으로 시작하면 해당 줄과 추가 1개가 인쇄됩니다 . \n
줄이 "Question"으로 시작하면 .\item