정리해야 할 텍스트가 있습니다. 기본적으로 각 주석 앞에 줄바꿈을 추가하여 두 줄 사이에 빈 줄이 있도록 하세요.
참고를 위해 수정이 필요한 내용의 예는 다음과 같습니다.
# 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의 "주소 지정"을 피합니다. 이제 우리는 시작하고 모든 것이 실행되는 모든 라인을 처리할 수 있습니다. #
패턴 공간을 교체하고 공간의 내용을 저장합니다. 예비 공간이 비어 있으므로 빈 줄이 인쇄되고, 두 번째는 버퍼를 다시 변경하여 예비 공간이 다시 비어 있고 기본적으로 원래 줄이 인쇄됩니다.{}
x
p
x
답변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