2014-11-12 2 views
0

을 sed를 사용하여 나는 속성을 다음과 같이 파일이 있습니다모든 발생을 '.'로 바꿉니다. '_' '='전에

build.number=153013 
db.create.tablespace=0 
db.create.user=0 
db.create.schema=0 
upgrade.install=1 
new.install=0 
configure.jboss=0 
configure.jbosseap=false 
configure.weblogic=1 
configure.websphere=0 

내가 쉘 스크립트에 이러한 변수를 가져와야합니다. 아시다시피, '. 리눅스에서 변수로 사용할 수있는 문자가 아닙니다. 어떻게 sed를 사용하여 '.'을 모두 대체 할 수 있습니까? '='앞에 '_'를 붙이십시오. 나는 '의 모든 발생을 대체했습니다.' 그러나 '.'을 포함하는 값을 가진 속성이 있습니다. 나는 수정하고 싶지 않다.

도움을 주시면 감사하겠습니다.

감사합니다.

+0

당신이 시도한 것을 보여줄 때 좋기 때문에 다른 사람들이 당신이 무언가를 시도했다고보고 다른 사람에게 일을 요구하는 것이 아닙니다. 그렇지 않습니다. : D – Rubens

+0

동등한 전에 항상 적어도 하나의 도트가 있습니까? –

+0

여기에 제가 시도한 것이 있습니다 : "sed 'y /./_/'$ TEMP_FOLDER/$ FILE_NAME_WITHOUT_MIME_TYPE/build.properties >> $ TEMP_FOLDER/$ FILE_NAME_WITHOUT_MIME_TYPE/build.properties.temp" –

답변

0

당신이 한 경기에 성공하는 한 stringWithoutEquals_stringWithoutEquals.을 대체

sed -e ':b; s/^\([^=]*\)*\./\1_/; tb;' 

사용할 수 있습니다. 결과적으로 = 앞에있는 .을 모두 _으로 바꿉니다.

+0

설명 및 솔루션에 감사드립니다! 무엇입니까 : b; 에 대한 플래그? –

+0

@VarunPatel 'b'라는 라벨입니다. 'tb'는 "성공하면 레이블 b로 점프합니다" –

+0

'-e'는 필요하지 않습니다. 하나의 코드 그룹/스크립트를 가지고 있기 때문에 – Jotne

0

이 작업을 시도 할 수 있습니다 :

sed 's/\.\|\(=.*\)/_\1/g;s/_=/=/' file 

접근 방법은 (가능한 점 포함)의 모든 후행 문자를 소비하는 평등 한 후 모든 콘텐츠를 캡처로 구성되어 있습니다. 따라서 등호 앞에 오는 모든 점은 밑줄과 빈 캡처 그룹으로 바뀌지 만 동등한 점 앞에는 밑줄이 있습니다. 두 번째 대체는이 마지막 밑줄을 제거합니다.

+1

솔루션에 감사드립니다. 그 진술의 논리를 설명해 주시겠습니까? –

0

당신 (GNU이 나오지도)에 대한이 작동하지 않을 수 있습니다 다음 =에서 마커로

sed 's/=/&\n/;h;y/./_/;G;s/\n.*\n//' file 

별도의 라인. 선을 복사하십시오. .을 모두 _ '으로 바꿉니다. 원래 선을 추가하고 두 표식 사이의 텍스트를 뺍니다. 여기

0

그것은 =하여 텍스트를 나누는 awk

awk -F= '{gsub(/\./,"_",$1)}1' OFS== file 
build_number=153013 
db_create_tablespace=0 
db_create_user=0 
db_create_schema=0 
upgrade_install=1 
new_install=0 
configure_jboss=0 
configure_jbosseap=false 
configure_weblogic=1 
configure_websphere=0 

이며, 다음으로 제 _. 필드에서 대체.

+0

awk가 sed와 다른 점은 무엇입니까? –

+0

'awk'는'sed'보다 훨씬 복잡하며 진행되는 것을 더 쉽게 읽을 수 있습니다.간단한 것들에 대해서'sed'가 더 좋을 수도 있습니다. 구글 검색'sed 대 awk'을해라. – Jotne

관련 문제