다음 파일에서:
ruler 1 2 3 4 5 6 7 8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
\usage{
function(
parameter,
parameterparameter,
parameter = parameter,
parameter = p,
parameter = para,
parameter = para,
paramete = p,
parameterparameter = pa,
parameter = p,
p = pa,
param,
parameterpara = par,
paramet = par,
parameter = param,
parameterpa = param,
...
more lines
"usage" 줄을 "..." 줄과 연결한 다음 80번째 문자(열) 앞의 쉼표 뒤에 새 줄 바꿈을 만들고 싶습니다.
현재는 n번째 쉼표 뒤에 줄 바꿈을 하고 있지만, 많은 경우에 세 번째 쉼표 뒤에 공백이 많이 남아 있기 때문에 그다지 효율적이지 않습니다. 그래서 나는 개행 앞의 쉼표가 가능한 한 80번째 문자에 가깝기를 원합니다.
sed -i -r '/usage/{:a;N;/\.\.\./!ba;s/\n//g}' filename.txt
sed -i 's/\(\([^,]\+,\)\{3\}\)/\1\n/g;s/\n/\n/g' filename.txt
나는 "par", "fold" 및 "fmt" 문서를 살펴보았으나 성공하지 못했습니다. "fold"는 가깝지만 쉼표 대신 공백으로 줄을 나눕니다.
sed -i -r '/usage/{:a;N;/\.\.\./!ba;s/\n//g}' filename.txt
fold -s filename.txt | tee filename.txt
답변1
사용 awk
:
$ awk '/^\\usage/,/^\.\.\./ { if (length(line $0) >= 80) { print line; line = $0 } else line = line $0; next }; line != "" { print line; line = "" }; 1' file
1 2 3 4 5 6 7 8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
\usage{function(parameter,parameterparameter,parameter = parameter,
parameter = p,parameter = para,parameter = para,paramete = p,
parameterparameter = pa,parameter = p,p = pa,param,parameterpara = par,
paramet = par,parameter = param,parameterpa = param,...
more lines
코드 awk
, 주석:
/^\\usage/,/^\.\.\./ {
# This block triggers for all lines between a line
# starting with "\usage" and another line
# starting with "..."
# If our saved output line and the current line together
# is longer or equal to 80 characters, print the output
# line and reset it to the current line. Else, add the
# current line to the end of the saved output line.
if (length(line $0) >= 80) {
print line
line = $0
} else
line = line $0
# Skip to next line of input.
next
}
# If we get here and the saved output line is
# non-empty, then there is data to output, so
# do that.
line != "" { print line; line = "" }
# Print all input.
1
답변2
후루룩 소리 모드를 사용하는 게으른 변형 perl
:
perl -0777 -pi -e '
s{\\usage.*?\n\.\.\.\n}{
($r = $&) =~ s/\n//g;
$r =~ s/\G.{0,79}(,|.$)\K/\n/g;
$r
}gse' your-file
이것은 만든다:
1 2 3 4 5 6 7 8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
\usage{function(parameter,parameterparameter,parameter = parameter,
parameter = p,parameter = para,parameter = para,paramete = p,
parameterparameter = pa,parameter = p,p = pa,param,parameterpara = par,
paramet = par,parameter = param,parameterpa = param,...
more lines