텍스트 변환을 위한 SED 명령

텍스트 변환을 위한 SED 명령

도와주세요.성공적인 현지 운영 다음 변환은 awk의 도움으로 구현되었습니다. 이제 지역(GNU Awk 4.0.2 버전의 Linux Cent OS)은 완벽하게 작동하지만 문제는 원격 버전에 있습니다.

답변1

필요하지 않은 것을 sed사용하여 이 작업을 수행할 수 있습니다 GNU awk. 그러나 sp.config.fal.proxyhost.LiferayKeyStore.jks

awk따라서 a를 변환해야 하는 행에 대한 규칙 ${ ... }과 시작 부분의 키 이름만 변환해야 하는 경우에 대한 규칙 의 두 가지 규칙으로 구성된 프로그램을 제안합니다 (실제로는 세 가지 규칙입니다. 첫 번째 규칙) 케이스 찾기의 경우 , 명령문만 발견된 모든 케이스 ${ ... }에 대한 다음 항목 , 빈 줄을 포함한 "기타 모든" 케이스에 대한 항목)key=value

입력 텍스트가 라는 파일에 있다고 가정하면 config.cfg다음과 같습니다.

awk '/\$\{[[:print:]]*\}/ {match($0,"([[:print:]]+)=\\${([[:print:]]+)}([[:print:]]*)",a); gsub("\\.","_",a[1]); gsub("\\.","_",a[2]); print toupper(a[1])": (("toupper(a[2])"))"a[3]; next}; /[[:print:]]+=[[:print:]]+/ {match($0,"([[:print:]]+)=([[:print:]]+)",a); gsub("\\.","_",a[1]); print toupper(a[1])": "a[2]; next}; {print}' config.cfg

이렇게 하면 다음이 수행됩니다.

  • 패턴을 포함하는 모든 줄에 대해 인쇄 가능한 문자 수를 제한 없이 ${...}사용하여 match()패턴 "최대 1개", =둘러싸는 문자열이 포함된 패턴 및 이후의 인쇄 가능한 문자 수를 지역화합니다. ${ ... }괄호로 묶인 모든 부분은 "하위 표현식"으로 표시되며 해당 부분은실제내용은 첫 번째 하위 표현식 등 a으로 배열에 저장됩니다 . 그런 다음 부분 을 a[1]취하고 모든 마침표를 밑줄로 바꿉니다. 두 번째 하위 표현식에 포함된 문자열에 대해서도 동일한 작업을 수행 합니다 . 출력으로 대체된 a 의 대문자 변환 버전을 인쇄합니다 ( 그러나 이번에는 포함 ). 마지막으로 "나머지 줄"인 변환되지 않은 버전을 인쇄합니다 .gsuba[1]key${...}a[2]a[1]:a[2](( ... ))a[3]매우 중요: 우리는 이 next지시문을 사용하여 해당 줄의 추가 처리를 건너뛰고 다음 줄부터 다시 시작합니다. 그렇지 않으면 다른 변환을 통해 두 번 처리(및 출력)될 수 있습니다.

  • 우리가 우연히 발견하지 않았다면 ${ ... }이 줄은하다"key=value" 문( /[[:print:]]+=[[:print:]]+/즉, 0이 아닌 인쇄 가능한 문자 =뒤에 0이 아닌 인쇄 가능한 문자가 옴)을 포함하고 "키" 부분에만 대체 및 변환을 적용합니다. 마찬가지로 규칙이 일치하면 추가 처리를 건너뜁니다.

  • 마지막으로, 위의 규칙 중 어느 것도 충족되지 않으면 "있는 그대로" 줄을 인쇄하세요.

편집하다

null 값이 있는 경우, 즉 key=해당 값을 캡처하기 위해 다른 규칙도 추가해야 합니다.

awk '/\$\{[[:print:]]*\}/ {match($0,"([[:print:]]+)=\\${([[:print:]]+)}([[:print:]]*)",a); gsub("\\.","_",a[1]); gsub("\\.","_",a[2]); print toupper(a[1])": (("toupper(a[2])"))"a[3]; next}; /[[:print:]]+=[[:print:]]+/ {match($0,"([[:print:]]+)=([[:print:]]+)",a); gsub("\\.","_",a[1]); print toupper(a[1])": "a[2]; next}; /[[:print:]]+=[[:space:]]*/ {match($0,"([[:print:]]+)=([[:space:]]*)",a); gsub("\\.","_",a[1]); print toupper(a[1])":"; next}; {print}' config.cfg

key=valueBase64 변환으로 인해 a로 끝나는 쌍이 있기 때문에 세 번째 규칙을 두 번째 규칙에 흡수하는 것은 불가능합니다 .=

관련 정보