sed를 사용하여 지정된 문자열을 지정된 위치로 이동합니다.

sed를 사용하여 지정된 문자열을 지정된 위치로 이동합니다.

sed(정규식 사용)를 사용하여 지정된 문자열(수학에서 시작)을 특정 위치(열 20)로 이동하려면 어떻게 해야 합니까? 각 행의 수학으로 시작하는 문자열을 20열로 이동하고 수학 문자열이 항상 행의 마지막 단어에 있도록 하고 싶습니다.

how are you math123 
good math234
try this math500 

답변1

만약 당신이 정말로~ 해야 하다를 사용 sed하면 가능한 알고리즘 중 하나는 문자열 앞에 math18자 이하의 공백을 추가하는 것입니다.

$ sed -e :a -e 's/\(^.\{,18\}\)math/\1 math/; ta' file
how are you        math123 
good               math234
try this           math500 

문자열의 마지막 항목만 이동하려면 문자열을 줄 끝에 고정하면 됩니다. 예를 들어, 다음과 같은 것이 주어졌습니다.

$ cat file
how are you math123
good math234
try this math500
math101 is enough math

그 다음에후행 공백이 없는 경우

$ sed -e :a -e 's/^\(.\{,18\}\)\(math[^[:space:]]*\)$/\1 \2/; ta' file
how are you        math123
good               math234
try this           math500
math101 is enough  math

sed확장된 정규식 패턴이 있는 경우 다음과 같이 단순화할 수 있습니다.

sed -E -e :a -e 's/^(.{,18})(math[^[:space:]]*)$/\1 \2/; ta'

답변2

sed는 수학을 잘하지 못하지만 awk는 다음과 같습니다.

$ awk -Fmath '{printf "%-20smath%s\n",$1,$2}' file
how are you         math123 
good                math234
try this            math500 

이 코드는 가능한 코너 케이스를 올바르게 처리하지 못할 수도 있지만 시작하는 데는 도움이 됩니다.

답변3

perl -pe 's/(?=math)/" " x (19-length($`))/e'      yourfile

perl -pe 's// / while /.*\K(?=math)/g && 19 > pos' yourfile

피복재

  • Perl 옵션은 -p한 줄씩 읽도록 암시적 파일 루프를 설정합니다. 현재 레코드(일명 행)는 $_변수에 저장됩니다.
  • while루프는 다음을 수행합니다.
    • a) /.*\K(?=math)/g현재 줄에서 작업하고 위치와 서 있을 위치를 $_찾습니다 regex. 오른쪽은 "math" 문자열이 될 수 있고 왼쪽은 무엇이든 될 수 있습니다.
      • b) 정규식이 성공하면 다음으로 위치가 19보다 작은지 확인합니다. 그렇지 않으면 루프를 중단하세요 while.
      • c) 루프 본문은 루프 연산문 while에서 결정된 위치에 공백을 추가합니다 while.

결과

         1         2         3
123456789012345678901234567890
good               math234
how are you        math123
1234567890
good               math234
try this           math500
math101 is enough  math

관련 정보