파일에서 구분 기호 뒤에 =가 처음 나타날 때 큰따옴표 추가 |

파일에서 구분 기호 뒤에 =가 처음 나타날 때 큰따옴표 추가 |

=파일에서 처음으로 나타나는 구분 기호 뒤에 큰따옴표를 추가합니다.|

입력하다:

Ver=7|errmsg=0=sucess,1=failue

나는 출력을 원한다.

Ver"="7|errmsg"="0=success,1=failue

=큰따옴표는 구분 기호가 처음 나온 뒤에만 추가해야 합니다 |.

awk를 사용하면 이를 달성할 수 있지만 awk -i inplace를 사용하면 파일에서 이러한 변경을 수행할 수 없습니다.

sed나 다른 방법을 사용하여 변경할 수 있나요?

답변1

$ cat file
Input: Ver=7|errmsg=0=sucess,1=failue
$ awk -F '|' 'BEGIN { OFS=FS } { sub("=", "\"=\"", $2); print }' file
Input: Ver=7|errmsg"="0=sucess,1=failue

이는 awk데이터를 두 개의 |분리된 필드로 사용하고 처리합니다. 이 호출은 첫 번째 필드를 두 번째 필드로 바꿉니다 sub(). 그런 다음 수정된 줄을 인쇄합니다.="="

=변경됨구분 기호(필드가 세 개 이상인 경우) 루프를 사용합니다.

awk -F '|' 'BEGIN { OFS=FS } { for (i = 2; i <= NF; ++i) sub("=", "\"=\"", $i); print }' file

최신 GNU를 사용하여 변경하려면 다음을 수행하세요 awk.

awk -i inplace -F '|' 'BEGIN { OFS=FS } { for (i = 2; i <= NF; ++i) sub("=", "\"=\"", $i); print }' file

GNU가 아닌 경우 awk:

cp file file.tmp
awk -F '|' 'BEGIN { OFS=FS } { for (i = 2; i <= NF; ++i) sub("=", "\"=\"", $i); print }' file.tmp >file
rm file.tmp

답변2

sed 's/=/"="/1' file |sed 's/=/"="/2'

답변3

GNU sed 다음과 함께 확장 정규식 엔진을 사용할 수 있습니다 .

$ sed -Ee 's/((^|[|])[^|=]*)=/\1"="/g' input.txt

관련 정보