문자열을 찾아 SUBSTRING으로 바꿉니다.

문자열을 찾아 SUBSTRING으로 바꿉니다.

이런 파일이 있습니다. 예(test.txt)

$$BATCHCTRL=TEST-012017
$$STATE=CA AZ
$$FROM_DATE=01/10/2017
$$TO_DATE=01/30/2017

내가 해야 할 일은 $$STATE=CA AZ이를 값의 처음 2바이트로 바꾸는 것뿐입니다. 즉( CA).

출력 파일은 다음과 같아야 합니다.

$$BATCHCTRL=TEST-012017
$$STATE=CA
$$FROM_DATE=01/10/2017
$$TO_DATE=01/30/2017

답변1

나는 한 쌍의 문자가 STATE대문자에 있다고 가정합니다. 그렇지 않은 경우 교체해야 합니다 [A-Z] [A-Za-z].

다음과 같은 간단한 명령을 사용할 수 있습니다.

sed -Ei 's/^\$\$STATE=([A-Z]{2}) ([A-Z]{2})/\$\$STATE=\1/g' sed_file

$$like로 시작하는 행을 일치시키고 이를 and의 첫 번째 하위 표현식 $$STATE=AB CD으로 바꿉니다 .$$STATE\1

편집: 추가 작은따옴표를 원하면 다음을 사용하십시오.

sed -Ei 's/^\$\$STATE=([A-Z]{2}) ([A-Z]{2})/\$\$STATE='"'"'\1'"'"'/g' sed_file

답변2

awk 'BEGIN { FS=OFS="=" } $1 == "$$STATE" { split($2,a," "); $2 = "'"'"'" a[1] "'"'"'" } 1' file

awk이는 파일을 =구분된 필드 모음 으로 구문 분석하는 데 사용됩니다 . 첫 번째 필드가 정확한 문자열인 경우 $$STATE두 번째 필드는 공백으로 구분되며 작은따옴표로 묶인 첫 번째 공백으로 구분된 비트 값이 할당됩니다.

펑키한 모양 "'"'"'"은 작은따옴표로 묶인 스크립트의 큰따옴표 작은따옴표 문자입니다 awk.

결과는 다음과 같습니다

$$BATCHCTRL=TEST-012017
$$STATE='CA'
$$FROM_DATE=01/10/2017
$$TO_DATE=01/30/2017

또는 다음을 사용하십시오 sed.

sed -E '/^\$\$STATE=/s/=([^ ]*).*/='"'"'\1'"'"'/' file

이렇게 하면 string 으로 시작하는 줄을 찾은 다음 $$STATE=그 뒤에 오는 모든 줄을 =공백 앞의 첫 번째 비트로 바꾸고 다시 작은따옴표를 삽입합니다.

관련 정보