개행 없이 줄에 문자를 추가하기 위해 sed를 사용하는 방법은 무엇입니까?

개행 없이 줄에 문자를 추가하기 위해 sed를 사용하는 방법은 무엇입니까?

다음 텍스트가 있습니다.

Variables = X, Y, Z
Zone T="Run 0020 Probe Points", I=19, J=1, F=POINT
DT=(double double double)
AUXDATA Zone_1_X = 28.180958

"다음을 얻기 위해 큰따옴표( )를 추가하고 싶습니다 28.180958.

Variables = X, Y, Z
Zone T="Run 0020 Probe Points", I=19, J=1, F=POINT
DT=(double double double)
AUXDATA Zone_1_X = "28.180958"

sed -i 4s/=\ /=\ \"/ ...숫자 앞에 큰따옴표를 삽입하면 성공적으로 사용할 수 있지만 큰따옴표를 추가하는 것은 어렵습니다. sed를 사용하여 AUXDATA 줄에 큰따옴표를 추가하는 다양한 방법을 시도했지만 큰따옴표가 실제 줄 끝이 아닌 AUXDATA 줄 아래에 나타납니다. 예를 들어 sed 4a'"' data.txt다음을 수행하십시오.

Variables = X, Y, Z
Zone T="Run 0020 Probe Points", I=19, J=1, F=POINT
DT=(double double double)
AUXDATA Zone_1_X = 28.180958
"

내가 시도한 모든 것은 "AUXDATA 줄 위나 아래에 큰따옴표( )를 넣습니다. AUXDATA 줄 자체의 끝에 큰따옴표를 어떻게 얻나요?

답변1

요령은 줄의 마지막 공백으로 구분된 토큰과 같이 줄 끝에 있는 항목을 일치시킨 다음 해당 토큰 주위에 큰따옴표를 사용하여 줄을 다시 작성하는 것입니다.

이 명령은 다음을 수행합니다.

sed -E 's/^(AUXDATA.*) ([^ ]*)$/\1 "\2"/' < foo

-E옵션은 sed에게 확장 정규식 구문을 사용할 것임을 알려줍니다.

정규식 자체는 줄을 두 부분으로 나눕니다.

  • AUXDATA줄의 시작 부분( ^줄의 시작을 나타냄)과 그 뒤에 공백으로 끝나는 텍스트

  • 공백을 포함하지 않고 줄 끝에서 끝나는 줄 부분

구체적으로 이 경우 첫 번째 블록이 일치 AUXDATA Zone_1_X =하고 두 번째 블록이 일치합니다 28.180958. sed그런 다음 해당 줄을 다음으로 바꾸십시오.

  • 첫 번째 부분 \1다음에 공백이 옵니다.
  • 큰 따옴표, 두 번째 부분 \2및 또 다른 큰 따옴표.

입력 파일의 다른 모든 행은 변경되지 않은 상태로 전달됩니다 sed.

관련 정보