다음 텍스트가 있습니다.
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
.