도와주세요.성공적인 현지 운영 다음 변환은 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 의 대문자 변환 버전을 인쇄합니다 ( 그러나 이번에는 포함 ). 마지막으로 "나머지 줄"인 변환되지 않은 버전을 인쇄합니다 .gsub
a[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=value
Base64 변환으로 인해 a로 끝나는 쌍이 있기 때문에 세 번째 규칙을 두 번째 규칙에 흡수하는 것은 불가능합니다 .=