다음 문제를 해결하려면 쉘 스크립트가 필요합니다
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:"로 시작하고 "||"로 끝나는 행을 일치시키고, 마지막 "|"까지의 행을 괄호로 캡처하고 이를 캡처된 문자열로 바꾸고 그 뒤에 공백과 "|"가 옵니다. 편집된 라인을 인쇄합니다.
다양한 시작/끝 문자열을 수용하기 위해 매개변수화되지 않았으므로 품질이 좋은 답변은 아니지만 빠른 일회성 명령이 필요할 수 있습니다.