줄 시작 문자열과 끝 문자열이 일치하면 줄의 끝 문자열을 바꾸고 동일한 줄 사이에 일치하는 문자열을 무시해야 합니다.

줄 시작 문자열과 끝 문자열이 일치하면 줄의 끝 문자열을 바꾸고 동일한 줄 사이에 일치하는 문자열을 무시해야 합니다.

다음 문제를 해결하려면 쉘 스크립트가 필요합니다

elecj_test: |1009676|F|269.13348200|3|348415|237.06|0.00|0.00|||SSPPPSSSPSSS|UNTESTED||

줄이 다음으로 시작하는 경우전자 테스트:그리고||다음으로 교체해야 합니다.|

그 사이에 공간이 있어요|

발견되면 줄의 중간에 있습니다.||교체할 수 없으며 줄 끝에서만 가능합니다.

답변1

그리고, 파이프를 필드 구분자로 사용:

  • 첫 번째 필드가 "elecj_test:"와 같은지, 마지막 필드가 비어 있는지, 마지막으로 두 번째 필드가 비어 있는지 테스트합니다.
  • true인 경우 마지막에서 두 번째 필드를 공백으로 설정합니다.
awk '
  BEGIN { FS = OFS = "|" }
  $1 == "elecj_test: " && $NF == "" && $(NF - 1) == "" {
    $(NF - 1) = " "
    print
  }
' file
elecj_test: |1009676|F|269.13348200|3|348415|237.06|0.00|0.00|||SSPPPSSSPSSS|UNTESTED| |

답변2

||다음은 필요에 따라 결말을 편집하는 sed 명령입니다.

sed -n 's/^\(elecj_test:.*|\)|$/\1 |/p'

"elecj_test:"로 시작하고 "||"로 끝나는 행을 일치시키고, 마지막 "|"까지의 행을 괄호로 캡처하고 이를 캡처된 문자열로 바꾸고 그 뒤에 공백과 "|"가 옵니다. 편집된 라인을 인쇄합니다.

다양한 시작/끝 문자열을 수용하기 위해 매개변수화되지 않았으므로 품질이 좋은 답변은 아니지만 빠른 일회성 명령이 필요할 수 있습니다.

관련 정보