텍스트 서식 지정 - 주석 줄 앞에 줄바꿈 삽입

텍스트 서식 지정 - 주석 줄 앞에 줄바꿈 삽입

정리해야 할 텍스트가 있습니다. 기본적으로 각 주석 앞에 줄바꿈을 추가하여 두 줄 사이에 빈 줄이 있도록 하세요.
참고를 위해 수정이 필요한 내용의 예는 다음과 같습니다.

# quickly backup or copy a file with bash
cp filename{,.bak}
# Rapidly invoke an editor to write a long, complex, or tricky command
ctrl-x e
# Copy ssh keys to user@host to enable password-less ssh logins.
$ssh-copy-id user@host
# Empty a file
> file.txt
# Execute a command without saving it in the history
<space>command
# Capture video of a linux desktop
ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg
# Salvage a borked terminal
reset
# start a tunnel from some machine's port 80 to your local post 2001
ssh -N -L2001:localhost:80 somemachine
# Execute a command at a given time
echo "ls -l" | at midnight
# Query Wikipedia via console over DNS
dig +short txt <keyword>.wp.dg.cx
# currently mounted filesystems in nice layout
mount | column -t
# Update twitter via curl
curl -u user:pass -d status="Tweeting from the shell" http://twitter.com/statuse
s/update.xml
# Place the argument of the most recent command on the shell
'ALT+.' or '<ESC> .'
# output your microphone to a remote computer's speaker
dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp    

나는 그것이 다음과 같이 보이기를 원합니다 :

# quickly backup or copy a file with bash
cp filename{,.bak}

# Rapidly invoke an editor to write a long, complex, or tricky command
ctrl-x e

# Copy ssh keys to user@host to enable password-less ssh logins.
$ssh-copy-id user@host

# Empty a file
> file.txt

# Execute a command without saving it in the history
<space>command

# Capture video of a linux desktop
ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg

# Salvage a borked terminal
reset

sed올바른 형식을 얻기 위해 OSX를 사용해 보았지만 소용이 없었습니다.

sed 's/^\#/\n&/g' <filename.txt>

awk그것이 문제를 해결하는 더 좋은 방법이라면 나는 그것을 사용하는 것을 반대하지 않습니다.

답변1

awk '{if (/^#/) {if (!n++ && NR>1) print ""} else n=0; print}'

로 시작하는 일련의 줄에서 첫 번째 줄 앞에 빈 줄이 삽입됩니다 #. 따라서 다음과 같은 입력을 위해:

xx
#1
#2
yy

다음을 제공합니다:

xx

#1
#2
yy

n코멘트 라인 그룹의 코멘트 라인 수를 셉니다. print ""각 주석 행 그룹의 첫 번째 행에 있는 경우(그리고 첫 번째 행 제외 입력을 사용하는 경우) 빈 행( )을 인쇄합니다 NR>1.

답변2

올바른 sed것은

sed '2,$s/^#/\n#/' filename

개행 문자가 추가됩니다.오직이 줄 앞에시작그리고 댓글을 남겨주세요.

파일의 두 번째 줄 2,$부터 마지막 ​​줄까지 sed의 개수를 나타냅니다. 바꾸기 명령에서는 s주석 기호( )로 시작하는 줄을 찾고 해당 줄을 ^#개행 문자와 우리가 찾은 주석 기호( ) 로 바꿉니다.\n#

g한 줄에 있는 모든 옵션을 바꾸고 싶지 않기 때문에 명령 끝에 옵션이 필요하지 않습니다 #.

대체 문자열이 표준에 정의되어 있지 않기 sed때문에 이는 GNU에서만 작동합니다 . \n하지만 넌 할 수 있어

sed '1n;/^#/{x;p;x;}' filename

대신에. 첫 번째 줄을 인쇄 1n하고 다음 줄을 계속 진행하세요. 이런 식으로 우리는 끝까지 라인 2의 "주소 지정"을 피합니다. 이제 우리는 시작하고 모든 것이 실행되는 모든 라인을 처리할 수 있습니다. #패턴 공간을 교체하고 공간의 내용을 저장합니다. 예비 공간이 비어 있으므로 빈 줄이 인쇄되고, 두 번째는 버퍼를 다시 변경하여 예비 공간이 다시 비어 있고 기본적으로 원래 줄이 인쇄됩니다.{}xpx

답변3

분기를 사용하여 각 주석 블록의 첫 번째 줄 바로 앞에 개행 문자를 추가할 수도 있습니다 sed.

sed -n '1{p;d}; /^#/{s/^/\n/;:x;p;n;/^#/bx}; /^#/!p' filename

여기:

  • 1{p;d}첫 번째 줄 앞에 새 줄을 추가하지 마세요.

  • /^#/{s/^/\n/;:x;p;n;/^#/bx}각 주석 블록 앞에 새 줄을 추가하기만 하면 됩니다. 이것이 수행하는 작업에 대한 자세한 설명은 다음과 같습니다.

    • /^#/로 시작하는 행과 일치합니다 #. 이러한 줄의 경우 sed중괄호로 묶인 명령 블록이 실행됩니다.

    • s/^/\n/일치하는 줄 앞에 개행 문자를 추가합니다.

    • :x;p;n;/^#/bx레이블을 정의하고 x, 패턴 공간을 인쇄하고( p), 패턴 공간을 입력의 다음 줄로 바꾸거나( ), 새 패턴 공간이 주석 n( )이면 반환합니다.x/^#/bx

  • /^#/!p일반적으로 주석이 아닌 줄을 인쇄합니다.

편집: 다음과 같이 명령을 무효화할 수도 있습니다.

sed -n '1{p;d}; /^\s*$/bx; /^#/{s/^/\n/;:x;p;n;/^#/bx}; /^#/!p' filename

관련 정보