2011-05-01 6 views
1

다음은 sed (bash, centos)에서 사용하고있는 샘플 텍스트입니다. 텍스트를 쉽게 읽을 수 있도록 줄 바꿈했습니다. 하지만 아래 텍스트는 대개 한 줄로되어 있습니다.Sed search replace pattern (bash)

텍스트 (Abc_3.7 | AUTODETECT | "} {\ \ fldrslt 일반 \ F2 \ FS20 \ CF2 3 : 7}} F2의 \의 FS20 \ 일반 \

Xyz_3 0.16 | AUTODETECT | "} {\ 일반 \ F2 \ FS20 더 많은 텍스트 \ 일반 \ F2 \ FS20 \ CF2 16 \ fldrslt }}

Qr_3.11 | AUTODETECT |"} {\ fldrslt일반 \ 617,451,515,는 \ F2 \ FS20 \ CF2 11}} \ 일반 \ F2 \ FS20 뭔가

내가 각 항목에서 제거 할 :를 | AUTODETECT | "} {\ fldrslt \ 일반 \ F2 \ FS20 \ CF2 3 : 7}}

일반 \ 및}} 사이의 텍스트가 달라집니다, 그래서 모든 것을 선택해야

. .

s/|AUTODETECT|\"}{\\fldrslt \\plain .*}}/ /g; 

문제 내가 결과가있을 것으로 예상 :

여기에 내가 지금 사용하고 코드입니다

그러나 실제 결과은 다음과 같습니다

Abc_3.7 \plain \f2\fs20 

답변

1

.* 욕심과 '일반'을 포함하여 가까운 괄호의 마지막 쌍까지 다른 자동 감지 등 후 첫 번째 데이터에서 모든 일치 .

sed 's/|AUTODETECT|"}{\\fldrslt \\plain [^}]*}}/ /g' "[email protected]" 

'[^}]*'부분을 제외하고는 어떤 임의의 순서와 일치 '}'(뉴 라인) : 당신은 더 세련 (이하 욕심) 패턴이 필요합니다.

s/|AUTODETECT|"}{\\fldrslt \\plain [^}]*}}/ /g 

및 호출이된다 : 스크립트 파일에 갈 필요가있는 경우


후 나오지 스크립트 파일이 들어 기본적으로

sed -f sed.script "[email protected]" 

, 작은 따옴표를 제외한 모든 스크립트 파일로 이동하십시오. 작은 따옴표를 사용하면 얻을 수있는 이점 중 하나는 이스케이프에 대해 걱정할 필요가 없다는 것입니다. 스크립트가 작은 따옴표를 포함해야하는 경우에만 문제가 발생합니다.

+0

와우, 감사합니다. 훌륭한 작품입니다. .sed 파일에 코드를 넣으려면 코드를 어떻게 수정해야합니까? 지금까지 sed 파일을 사용한 나의 경험은 따옴표가 싫어서 ... –

+0

Jonathon 고맙습니다. –