sed
발견된 텍스트를 그대로 유지하고 끝에 콜론을 추가하여 텍스트 줄을 이것으로 바꾸려고 합니다 .
특히 파일에 이 형식의 줄이 많이 있습니다.
CWMPVendorXEventCodeCutOff 20
CWMP<othertitle> 20
이 형식으로 변경하고 싶습니다.
CWMPVendorXEventCodeCutOff: 20
CWMP<othertitle>: 20
나는 지금 여기 있다
sed 's_CWMP.*?\\s_CWMP.*?:_g'
그러나 이것은 분명히 작동하지 않습니다. 어떻게 해야 하나요?
답변1
sed 's/\<CWMP[^[:blank:]]*/&:/' file
대체 부분은 &
대체된 정규식 부분과 일치하는 문자열로 대체됩니다. CWMP
공백이 아닌 문자가 뒤에 오는 것과 일치합니다 . 시작 부분의 패턴은 \<
문자열이 CWMP
단어의 맨 처음 부분에 나타나는지 확인합니다(즉, 다른 곳의 하위 문자열로 표시되지 않음).
사용
sed 's/^CWMP[^[:blank:]]*/&:/' file
줄의 시작 부분에서 강제로 일치시켜야 하는 경우.
어떤 경우에는 다음을 사용할 수도 있습니다.
awk '$1 ~ /^CWMP/ { $1 = $1 ":"; print }' file
이는 줄에서 공백으로 구분된 첫 번째 단어를 일치시킨 ^CWMP
다음 :
해당 단어 끝에 a를 추가한다고 가정합니다. 그러나 이는 다음 줄의 두 필드 사이의 모든 공백을 "먹고" 단일 공백으로 대체합니다.
$ awk '$1 ~ /^CWMP/ { $1 = $1 ":"; print }' file
CWMPVendorXEventCodeCutOff: 20
$1 ~
각 줄의 시작 부분을 일치시키려면, 즉 줄에 초기 들여쓰기가 포함되어 있지 않은 경우 이를 제거하십시오.
답변2
sed -e 's/\(CWMPVendorXEventCodeCutOff\)/\1:/'
작동해야합니다.
답변3
다음 awk 명령을 사용하여 테스트하면 잘 작동합니다.
주문하다
awk '{$1=$1":";printf "%s%30s\n",$1,$2}' filename| sed -r "s/\s+/ /g"
산출
awk '{$1=$1":";printf "%s%30s\n",$1,$2}' y.txt | sed -r "s/\s+/ /g"
CWMPVendorXEventCodeCutOff: 20
CWMP<othertitle>: 20